[네트워크] TCP, UDP
Updated: Categories: CSTCP와 UDP 프로토콜에 대해 알아보자
TCP (Transmission Control Protocol)
- 전송계층에서 사용되는 프로토콜
- 패킷 유실이 없는 신뢰성을 보장하는 연결지향형 데이터 전송 프로토콜
- 데이터를 여러 패킷으로 나누고 수신측에서 재조합
헤더 구조
Source Port
: 출발지 포트번호Destination Port
: 목적지 포트번호Sequence Number
: byte 단위로 순서화되는 번호(TCP 세그먼트의 첫번째 byte에 부여됨)이며 이것을 통해 신뢰성(*3Way Handshake) 및 흐름제어- (sliding Window) 기능을 제공하게 됩니다.Acknowledgment Number
: 수신하기를 기대하는 다음 byte 번호 (마지막으로 수신에 성공한 번호의 +1)Offset
: 헤더 길이 필드이며 IPv4와 마찬가지로 나누기 4 계산 후 2진수로 작성됨Reserved
: 예약된 필드, 현재 사용되지 않음Window
: 자신의 수신 버퍼 여유용량 크기를 통보하여 얼마만큼의 데이터를 받을 수 있는지 상대방에게 알려주어 흐름제어를 수행하게 되는 필드TCP Flags
- U (Urgent) : 긴급 비트, 내가 지금 보내는 데이터가 우선순위가 높음. Urgnet Pointer와 세트
- A (Ack) : 승인 비트, 물어본거에 대한 응답을 해줄 때 사용됨
- P (Push) : 밀어넣기 비트, TCP 버퍼가 일정한 크기만큼 쌓여야 하는데 이거 상관없이 데이터를 계속 밀어 넣겠다
- R (Reset) : 초기화 비트, 상대방과 연결이 되어있는 상태에서 어떤 문제 등이 발생하여 연결 상태를 리셋하게 됨
- S (Syn) : 동기화 비트, 상대방과 연결을 시작할때 무조건 사용되는 플레그
- F (Fin) : 종료 비트
3 way handshake
- 클라이언트와 서버간 통신을 시작하기 위해 서로의 상태를 확인하는 절차
- 클라이언트가 서버에 접속을 요청하는 SYN 패킷을 보낸다. / SYN와 ACK 응답을 기다리는 SYN_SENT 상태가 된다
- 서버는 SYN 요청을 받고 요청을 수락하는 SYN과 ACK 패킷으로 응답한다. / 이때 서버는 클라이언트의 ACK 패킷 응답을 기다리는 SYN_RECEIVED 상태가 된다.
- 클라이언트는 서버에게 ACK 패킷을 보내고 연결이 이루어진다. / 클라이언트와 서버는 ESTABLISHED 상태가 된다
4 way handshake
- 클라이언트와 서버간 통신을 종료하기 위해 서로의 상태를 확인하는 절차
- 클라이언트가 연결 종료를 알리는 FIN 패킷을 보낸다
- 서버는 FIN 패캣을 받아 연결 종료를 감지하고 통신이 끝날때까지 TIME_WAIT 상태가 된다.
- 서버에서 통신이 종료됨을 알리기 위해 클라이언트로 FIN 패킷을 보낸다.
- 클라이언트에서 FIN 패킷을 받고 확인을 알리는 ACK 패킷을 보낸다.
흐름제어
- 송신측과 수신측의 데이터처리 속도 차이를 해결하기 위해 데이터 전송량을 제어하는 방법
- 송신측이 수신측보다 속도가 빠르면 패킷이 유실되는 문제가 발생함
- stop and wait
- 패킷을 정상적으로 수신했다는 응답을 받은 후에만 패킷을 보내는 방식
- sliding window
- 수신측에서 윈도우 크기를 정하고 윈도우 크기만큼 확인 응답없이 패킷을 전송하는 방식.
- 송신 버퍼 범위는 수신측의 여유 버퍼 공간을 반영하여 동적으로 변경됨
혼잡제어
- 한 라우터에 데이터가 몰릴 경우 수신측에서 데이터 처리에 과부하가 발생하여 재전송이 빈번하게 일어남
- 이러한 네트워크의 혼잡을 피하기 위해 송신측의 데이터 전송속도를 제어하는 방식
- AIMD(Additive Increase / Multiplicative Decrease)
- 패킷을 하나씩 보내면서 윈도우 크기를 1씩 증가시키다가 혼잡상태 발생시 윈도우를 절반으로 줄임
- 단점 : 초기 전송속도 증가가 더디고, 네트워크가 혼잡상태가 된 후에야 조치를 취한다
- Slow Start
- 윈도우 크기를 지수적으로 증가시키다가 임계점에 도달하면 선형적으로 증가시키고, 혼잡상태 발생시 정책에 따라 윈도우 크기를 감소
- 혼잡제어 정책에 여러가지 요소가 사용됨
Threshold
: 윈도우 크기가 지수적으로 증가하는 임계점3 ACK duplicate
: ACK 패킷이 세번 중복될 경우 윈도우 크기 감소Time out
: 패킷 응답 제한 시간이 초과될 경우 윈도우 크기 감소Fast Recovery
(빠른회복) : 혼잡상태 발생후 윈도우 크기가 줄었을때 윈도우 크기를 빠르게 증가시키는 모드Congestion avoidance
(혼잡회피) : 임계치에 도달하면 윈도우 크기를 1씩 증가시킴
UDP (User Datagram Protocol)
- 송신측에서 데이터 전송 결과를 확인하지않고 데이터를 보내기만하는 프로토콜
- 비신뢰성 + 비연결성 데이터 전송 프로토콜
- TCP에 비해 속도가 빠름
- 한두개의 프레임이 유실되도 큰 문제가 없고 빠르게 처리해야하는 실시간 서비스에서 사용됨