서버와 클라이언트 간에 데이터를 신뢰성있게 전달하기 위해 만들어진 프로토콜이다. 일반적으로 TCP와 IP를 같이 사용한다. (TCP/IP)
IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리한다.
연결 지향 프로토콜
이다.신뢰성을 보장
한다.흐름 제어: 송신측과 수신측의 데이터 처리 속도를 조절해서 수신자의 버퍼 오버플로우를 방지 ex) StopAndWait, 슬라이딩윈도우
혼잡 제어: 송신측의 데이터 전달과 네트워크의 데이터 처리 속도를 해결하기 위한 기법 ex) 합증가/곱감소 알고리즘, Slow Start,
오류 제어: 오류 검출과 재전송을 한다. ex) StopAndWait ARQ, GoBackN ARQ, SR(selective-repeat) ARQ
느리다.
3-way handshake
과정을 통해 연결을 설정하고 통신한다.4-way handshake
과정을 통해 연결을 종료한다.1) 클라이언트가 서버에게 연결 요청을 위한 SYN 전송
2) 서버는 SYN을 받아 LISTEN->SYN_RCV 상태가 되고,요청에 대한 대답 ACK와 포트를 열어달라는 요청 SYN를 클라이언트에게 전송
3) 클라이언트는 SYN와 ACK를 받아 ESTABLISHED로 상태를 변경하고 응답패킷 ACK를 서버에게 전송. ACK를 받은 서버는 상태다 ESTABLSHED로 변경
1) 클라이언트가 연결 종료를 위한 FIN 전송
2) 서버는 ACK를 보내고 자신의 통신이 끝날 때까지 기다리는 TIME_WAIT 상태가 됨
3) 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN 전송
4) 클라이언트는 응답패킷 ACK 전송
TIME_WAIT: 클라이언트가 서버에게 ACK를 받고 아직 도착하지 않은 패킷이 도착할 때까지 기다리기 위한 상태
데이터를 데이터그램 단위로 처리하는 프로토콜이다.
데이터그램 : 독립적인 관계를 지니는 패킷
특징
비연결형 프로토콜
이다.빠르며
네트워크 부하가 적지만 신뢰성을 보장하지 못한다.
RTP : 재전송을 하면 안 됨. 여보요'세'보다는 여보'X'요가 낫다.
Multicast : 한 사람이 못 받았다고 재전송하면 제대로 받은 사람은 중복적으로 데이터를 받음
DNS : 요청마다 TCP처럼 연결을 맺으면 속도도 느리고 부하도 큼
https://github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Network/TCP.md