전송계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하는 계층으로, 데이터 전달을 담당합니다.
1. TCP
1-1. TCP 특징
- 연결지향형 프로토콜로 패킷 교환 방식을 사용 ( ≠ 가상 회선 방식)
- 3-way handshaking 과정을 통해 연결을 설정하고
- Client -> Server : SYN (접속 요청)
- Server -> Client : ACK+SYN (요청 수락 & 접속 요청)
- Client -> Server : ACK (요청 수락)
- 4-way handshaking 과정을 통해 연결을 해제한다.
- Client -> Server : FIN (접속 해제 요청, 나는 다 보냈어! 이제 연결 끊자)
- Server -> Client : ACK (요청 수락, 알겠어 잠시만~)
- 서버는 클라이언트에게 알겠다는 확인 메세지(ACK)을 보내고 앱에게 종료하라고 말함
- 자신이 전송할 데이터가 남았으면 마저 다 전송하고 앱 종료
- Server -> Client : FIN (접속 해제 요청, 나도 끊을게!)
- Client -> Server : ACK (요청 수락, 알겠어~)
- 신뢰성 높음
- 흐름제어
- 데이터를 보내는 속도와 데이터를 받는 속도의 균형을 맞추는 것
- Stop and Wait : 매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷 전송
- sliding window (Go Back N ARQ) : 프레임이 손상되거나 분실되어 NAK이나 타임아웃이 발생한 경우 정상 수신이 확인된 마지막 프레임 이후로 모든 프레임을 재전송
- 혼잡제어
- 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송속도를 강제로 줄임
- 흐름제어가 송신측과 수신측 사이의 전송속도를 다루는데 반해, 혼잡제어는 호스트와 라우터를 포함한 보다 넓은 관점에서 전송 문제를 다룸
- 오류 제어
- 훼손된 segment의 감지 및 재전송, 손실된 segment의 재전송, 순서가 맞지 않게 도착한 segment를 정렬하고 중복 segment 감지 및 폐기
- TCP헤더의 checksum, 확인응답, 타임아웃을 통해 수행
- 흐름제어
- 순서 보장
- UDP 보다 느림
- 1:1 통신
1-2. TCP 헤더
- 헤더의 최소 크기 : 20byte
- Source Port : 송신자의 포트 / Destination Port : 수신자의 포트
- Sequence Number : 세그먼트의 순서 번호
- Acknowledgment Number : 상대방이 보낸 세그먼트를 잘 받았다는 것을 나타내기 위한 번호
- CheckSum : 오류 제어를 위한 필드, 데이터가 전송중에 손실되었는지를 확인(원본과의 대조를 통해)
2. UDP
- 크기가 작은 메세지 or 신뢰성 크게 고려 안해도 되는 상황에서 사용
2-1. UCP 특징
- 비연결형 프로토콜로 데이터그램 방식 사용
- 연결 설정,해제 과정 없음
- 신뢰성 낮음
- 데이터 수신 여부 확인 X, 데이터 손실 시 재전송을 하지 않음
- 순서 보장 없음
- TCP보다 속도가 빠름
- 1:1 OR 1:N OR N:N
2-2. UDP 헤더
- 헤더의 크기 : 8byte
- UDP에서의 checksum은 옵션이다. 필수가 아님