본문 바로가기
CS/[JSCODE] 컴퓨터 네트워크

[컴퓨터 네트워크/스터디] TCP

by 1two13 2023. 4. 24.
728x90
반응형

1. TCP(Transmission Control Protocol)


1-1. TCP에 대해 설명해주세요.

가이드: TCP 특징에 대해서 설명하기(신뢰적 데이터 전송 중심으로)


TCP는 연결 지향형이고, 신뢰적인 데이터 전송을 보장하는 프로토콜 입니다.

 

TCP는 통신 시작전3-way-handshake를 통해

사전 연결 설정을 한 다음 통신을 진행 합니다.

 

그리고 전송한 패킷에 대한 확인 응답, 재전송, 패킷의 순서번호, 타이머 등을 통해

신뢰적인 데이터 전송을 보장 합니다.

 

추가로 흐름제어혼잡제어를 통해

송신자의 패킷 전송 속도를 조절하는 기능이 있습니다.

 

 

TCP는 가상회선방식을 사용할까?
- 가상회선방식: 데이터를 전송하기 전에 논리적인 회선을 먼저 설정하고, 이후에 데이터를 전송하는 방식

TCP는 Connection을 연결하는 과정에서는 가상회선 방식과 유사한 동작을 하지만,

가상회선 방식을 직접적으로 사용하는 것은 아닙니다. 

 

TCP는 데이터 전송 전에 연결을 설정하고,

데이터를 전송할 때마다 각 패킷에 대해 헤더를 추가하여

목적지 주소포트 번호 등을 명시하는 방식으로 동작하기 때문입니다. 

 

TCP는 양방향 데이터 전송이 가능할까?

TCP는 양쪽 호스트 간에 동시에 양방향 데이터 전송이 가능합니다.

 

 

1-2. 3 way handshake에 대해 설명해주세요.

가이드: 3 way handshake을 왜 하는지 설명, 3 way handshake의 과정을 순차적으로 설명


데이터를 보내기 전

3-way handshake을 수행함으로써 Connection을 연결합니다. 


1. 클라이언트가 서버와 connection을 연결할 때 사용하는 SYN(씬)이라는 flag에 비트를 1로 설정하여 서버에 패킷을 송신합니다.
2. 서버는 SYN과 ACK(애크) 비트를 1로 설정하여 클라이언트로 패킷을 송신합니다. 만약 클라이언트가 ACK를 수신하지 못하면 재전송 요청을 보내 데이터 전송의 안정성을 유지합니다.
3. 클라이언트는 ACK 비트를 1로 설정하여 서버로 패킷을 송신합니다.

 

최종적으로 connection이 잘 되었다면

클라이언트와 서버 모두 ESTABLISHED 상태로 바뀌게되고,

데이터를 송수신할 수 있는 상태가 됩니다. 

출처: https://www.coengoedegebure.com/tcp-3-way-handshake-port-scanning/

 

 

1-3. 4 way handshake에 대해 설명해주세요.

가이드: 4 way handshake을 왜 하는지 설명, 4 way handshake의 과정을 순차적으로 설명


Connection 연결 후 Connection을 끊는 과정도 필요합니다.

이때 사용하는 방식이 4-way handshake입니다.


1. 데이터를 전부 전송한 클라이언트가 FIN을 1로 설정한 후 서버로 종료 요청을 합니다.
2. 서버는 그에 대한 응답으로 ACK를 1로 설정하여 클라이언트에게 전송합니다.
2-1. 서버에 남은 패킷이 있을 수 있기 때문에 일정 시간 대기하고,
3. 패킷이 모두 전달되었다면 서버가 FIN을 1로 설정해서 클라이언트에게 종료 요청을 합니다.
4. 클라이언트는 서버의 종료 요청에 대한 응답인 ACK를 서버에게 보내고,

이 과정이 끝나면 클라이언트와 서버 모두 CLOSED 상태로 바뀌게 되고 TCP 연결은 종료됩니다.

출처: https://velog.io/@nnnyeong/Network-TCP-3-way-4-way-Handshake

 

 

# 조금 더 디테일한 질문

1-4. Congestion control에 대해 설명해주세요.

가이드: Congestion control이 왜 필요한지 설명, Congestion control 종류 2가지 설명


혼잡제어는 네트워크의 혼잡을 줄이기 위해 패킷 전송 속도를 조절하는 것입니다.

 

혼잡 제어 방법에는 AIMD, Slow Start가 있습니다.

AIMD(Additive Increase, Multiplicative Decrease) 방식은

매 RTT마다 송신 윈도우 크기를 1씩 증가시키다가(Additive Increase)

패킷 손실이 발생하면

송신 윈도우 크기를 절반으로 만드는 방식입니다.(Multiplicative Decrease)

AIMD는 window size를 1MSS씩 밖에 증가시키지 않기 때문에

네트워크의 모든 대역을 활용하여 빠른 속도로 통신하기까지 시간이 오래 걸린다는 단점이 있습니다.

[AIMD] 출처: https://code-lab1.tistory.com/30

 

Slow Start 방식은

매 RTT마다 송신 윈도우 크기를 2배씩 증가시키다가,

설정된 임계값(Threshold)보다 슬로우 스타트 페이즈에 접어들면

윈도우 크기를 1씩 증가 시키도록 하고,

만약 패킷 손실이 발생하면

임계값을 현재 윈도우 크기의 절반(TCP Tahoe) 또는 1(TCP RENO)로 만드는 방식입니다.

[Slow Start] 출처: https://code-lab1.tistory.com/30

 

그럼 언제 어떤 방식을 사용하는 것이 좋을까?

AIMD는 안정적인 데이터 전송을 보장해야할 때 사용하는 것이 좋습니다. 

혼잡 윈도우 크기를 느리게 증가시키고, 

패킷 손실이 감지될 경우에는

혼잡 윈도우 크기를 감소시켜 

전송 속도를 감소시키는 방법을 사용하기 때문입니다. 

 

Slow Start는 초기에 빠른 전송 속도를 필요로 할 때 사용하는 것이 좋습니다.

예를 들어, 클라이언트가 서버에 처음 연결되는 경우에 사용합니다.

 

 

임계점(Threshold)

여기까지만 Slow Start를 사용하겠다는 의미입니다.

 

 

1-5. Flow control에 대해 설명해주세요.

가이드: Flow control이 필요한 이유 설명 


흐름제어는 송신자의 패킷 전송 속도를 조절하는 것입니다. 

 

송신자가 패킷을 보내는 속도가

수신자가 패킷을 읽어들이는 속도보다 빠르면

수신 버퍼에 오퍼 플로우가 일어나는 문제가 발생할 수 있습니다.

 

이런 문제를 방지하기 위해

수신자는 자신의 처리 능력에 따라 윈도우 크기를 동적으로 조절합니다. 

 

수신측은 패킷에 대한 확인 응답을 보낼 때

수신 버퍼에 빈 사이즈를 보내서

송신자가 윈도우 크기를 조절할 수 있도록 합니다. 

 

 

참고자료


 


질문이나 잘못된 점은 댓글로 남겨주세요 :)💖

728x90
반응형

댓글