Transmission Control Protocol
전송계층에서 데이터를 보내기 위해 사용하는 프로토콜
UDP와 달리 신뢰성을 보장함
연속성보다 신뢰성있는 전송이 중요할때 사용
인터넷 상에서 데이터를 메세지의 형태(세그먼트 라는 블록 단위)로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리한다.
TCP 통신위해 네트워크 연결을 설정 하는 과정
양쪽 모두 데이터를 전송할 준비가 되었다는 것을 알 수 있도록 한다.
A 프로세스(Client)가 B 프로세스(Server)에 연결을 요청할때를 예로들면 다음과 같다.
A -> B: SYN
A가 연결 요청 메시지 전송 (SYN)
이때 Sequence Number를 임의의 랜덤 숫자로 지정, SYN 플래그 비트를 1로 설정한 세그먼트를 전송
PORT 상태 - B: LISTEN, A: CLOSEDB -> A: SYN + ACK
접속 요청을 받은 B가 요청을 수락했으며, 요청한 A도 포트를 열어 달라는 메시지 전송 (SYN + ACK)
수신자는 Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하고, SYN과 ACK 플래그 비트를 1로 설정한 세그먼트를 전송
PORT 상태 - B: SYN_RCV, A: CLOSEDA -> B: ACK
PORT 상태 - B: SYN_RCV, A: ESTABLISHED
마지막으로 A가 수락 확인(ACK)을 보내 연결을 맺음
이때, 전송할 데이터가 있으면 이 단계에서 데이터를 전송할 수 있다.
PORT 상태 - B: ESTABLISHED, A: ESTABLISHED
TCP의 연결을 해제(Connection Termination) 하는 과정
A 프로세스(Client)가 B 프로세스(Server)에 연결 해제를 요청하면 다음과 같은 프로세스를 거친다
A -> B: FIN
A가 연결 종료한다는 FIN 플래그를 전송
B가 FIN 플래그로 응답하기 전까지 연결을 계속 유지B -> A: ACK
B는 Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하고, ACK 플래그 비트를 1로 설정한 세그먼트를 전송한다.
그리고 자신이 전송할 데이터가 남아있다면 통신을 끝내기 전에 마저 전송한다.
(이 상태가 TIME_WAIT 상태)B -> A: FIN
B가 남은 통신이 끝난후 연결 종료 요청에 합의한다는 의미로 A에게 FIN 플래그를 전송A -> B: ACK
B에서 FIN전에 전송한 패킷이 통신상의 이유로 FIN패킷보다 늦게 도착할때를 대비해 A는 FIN 수신후 일정시간(디폴트 240초) 동안 세션을 남겨놓고 잉여 패킷을 기다림 (이를 "TIME_WAIT" 라고함)
일정시간후, 세션을 만료하고 연결을 종료시키며, "CLOSE" 로 변화
3-way handshaking과정을 통해 연결을 설정하고, 4-way handshaking을 통해 연결을 해제한다.
데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것
송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내 수신하는 곳에서 문제가 일어나는 것을 막는다.
네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것
정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다.
전송이 양방향으로 동시에 일어날 수 있다.
각 연결이 정확히 2개의 종단점을 가지고 있다.
멀티캐스팅이나 브로드캐스팅을 지원하지 않는다.
연속성보다 신뢰성있는 전송이 중요할 때에 사용된다.
높은 신뢰성을 보장함
UDP대비 속도가 느리다.
User Datagram Protocol
데이터를 데이터그램 단위로 처리하는 프로토콜
비연결형 서비스로 데이터그램 방식을 제공한다
정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
신뢰성이 낮다
TCP보다 속도가 빠르다
https://gmlwjd9405.github.io/2018/09/19/tcp-connection.html
https://bangu4.tistory.com/74
https://velog.io/@hidaehyunlee/TCP-%EC%99%80-UDP-%EC%9D%98-%EC%B0%A8%EC%9D%B4