애플리케이션 계층 - HTTP, FTP
전송 계층 - TCP, UDP
인터넷 계층 - IP
네트워크 인터페이스 계층
전송 제어 프로토콜(Transmission Control Protocol)
연결을 시도하기 위해
IP번호+ 포트번호
를 알아야 한다.
클라이언트에서 랜덤으로 Sequence number를 만듦, 그리고 자신의 Sequence number(1000)를 서버에 보냄
서버는 클라이언트의 Sequence number를 받고, 자신이 랜덤으로 만든 Sequence number(4000)를 보냄, 서버는 클라이언트의 Sequence number를 잘 받았다는 의미로 클라이언트의 1000번에 1을 더해서 1001번을 보냄
클라이언트는 서버의 Sequence number 4000번을 잘 전달 받았다는 의미로 4001번을 다시 서버에 보냄.
Sequence number와 MSS 정책이 함께 교환되는 것을 기억하자.
연결을 끊자고 요구한 쪽에 TIME WAIT이 발생한다. (연결, 해제 모두 클라이언트가 동적이다)
TIME WAIT이 발생한 동안에는 Socket의 Port가 불필요하게 낭비되기 때문에
많은 요청을 받는 서버보다 클라이언트가 연결 해제 요청을 하도록
어플리케이션을 설계해야 한다.
Source port : 16bit
Destination port : 16bit
Port 번호는 2의 16제곱 -2개임 (65533개)
Sequence number: 연결, 해제 할 때 사용하는 일련번호
Data가 이동할때는 Data가 100bytes라고 했을 때 숫자가 100씩 증가함.
Data offset: 옵션이 있는지,
Flag: 상태를 설명하기 위한 부분(ACK, SYN, FIN등)
Window Size: TCP 수준의 Data가 오고갈 때 남은 여유 공간
Checksum: Data 손실 여부 확인하는 부분
장점
속도가 빨라요
Http3에서 사용되면서 TCP보다 더 높은 수준의 최적화가 가능한 장점이 부각되었어요
IPTV의 영상 송출같은 경우는 연결을 고려하여 하향 평준화 할 필요가 없음
게임 같은경우 TCP연결을 사용하게 되면 속도가 하향 평준화됨.
UDP를 사용해야 속도가 느려지지 않음.
파일 다운로드 중 LAN 케이블을 분리했다가 다시 연결하면 TCP 연결은 어떻게 될까?
연결이 끊기는 경우 충격이 발생했다고 한다.
버퍼는 네트워크의 연결이 끊기는 경우 충격을 완화시킨다. (이미 데이터를 미리 가져와 둠으로)
유선 연결은 직접적인 유선을 해제할 경우 충격이 발생하지만,
무선 연결의 경우 매우 빈번하게 발생할 수 밖에 없다.(Wifi 설치 장소에서 이동할 경우 등)