
전송 계층은 목적지에 신뢰할 수 있는 데이터를 전달하는 역할을 수행한다. 이 역할을 수행하기 위한 두 가지 기능을 가진다.
1. 오류를 점검하는 기능 : 오류가 발생하면 데이터를 재전송하도록 요청.
2. 전송된 데이터의 목적지가 어떤 애플리케이션인 식별하는 기능
ex) 홈페이지에서 사용하는 데이터를 메일 프로그램에 전송하지 않도록 한다.

캡슐화 : 응용 계층부터 물리 계층까지 계층별로 데이터를 전달할 때 헤더를 붙이는 것
역캡슐화 : 수신측 물리 계층부터 응용 계층까지 계층별로 데이터를 전달할 때 헤더를 제거하는 것
세그먼트 : TCP 헤더가 붙은 데이터
TCP 통신은 데이터 전송 전 연결(Connection)을 확립해야 한다.
*연결(Connection) : TCP 통신에서 정보를 전달하기 위해 사용하는 가상의 통신로
TCP 헤더 중 Flags 혹은 Code bit 영역은 아래와 같이 구성되어있다.
| URG | ACK | PSH | RST | SYN | FIN |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 |
이 중 SYN, ACK가 필요. SYN은 연결 요청, ACK는 확인응답.
연결 확립 시 (establish connection)

1. 클라이언트 측에서 서버측으로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.
2. 서버 측은 SYN을 받은 뒤 허가 응답을 회신하기 위해 연결 확인 응답(ACK)를 보낸다. 또한 서버 측도 클라이언트 측에게 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)을 보낸다.
3. 클라이언트 측은 서버 측 연결을 허가 하기 위해 연겷 확립 응답(ACK)을 보낸다.
연결 종료 시 (terminate connection)

1. 클라이언트 측에서 서버 측으로 연결 종료 요청(FIN)을 보낸다.
2. 서버측에서 클라이언트측으로 연결 종료 응답(ACK)을 보낸다.
3. 서버측에서 클라이언트 측으로 연결 종료 요청(FIN)을 보낸다.
4. 클라이언트 측에서 서버측으로 연결 종료 응답(ACK)을 보낸다.
연결 확립 후 실제 데이터를 보내거나 상대방이 받을 때는 TCP 헤더의 일련 번호(sequence number)와 확인 응답 번호(acknowledgement number)를 사용한다.
일련 번호 : 송신 측에서 수신 측에 '이 데이터가 몇 번째 데이터인지' 알려주는 역할
확인 응답 번호 : 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할

일련 번호와 확인 응답 번호를 사용해서 데이터가 손상되거나 유실된 경우, 데이터를 재전송하게 되어있음. (재전송 제어)
세그먼트를 하나 보댈 때마다 확인 응답을 확인할 경우, 효율이 매우 떨어짐.
세그먼트를 연속으로 보내고 난 다음에 확인 응답을 반환하여 효율을 높임.
수신측에서 연속으로 받은 세그먼트를 일시적으로 저장하는 장소를 버퍼(buffer)라고 함.
수신 측이 세그먼트를 대량을 받아서 처리하지 못하는 경우 버퍼가 넘쳐버림. 오버플로(overflow) 발생.
따라서 오버플로가 발생하지 않도록 버퍼의 크기를 알고 있어야 함. TCP 헤더 중 윈도우 크기(window size) 값
윈도우 크기의 초기 값은 연결 확립 시(3-way handshake) 윈도우 크기를 함께 보냄으로서 판단.
포트 번호를 통해 어떤 애플리케이션으로 가는 데이터인지 식별 가능
0 - 1023 : Well-known ports
1024 : 예약되어있지만 사용하지 않는 포트
1025 - : 랜덤 포트, 클라이언트 측의 송신 포트로 사용.
| 애플리케이션 | 포트 번호 |
|---|---|
| SSH | 22 |
| SMTP | 25 |
| DNS | 53 |
| HTTP | 80 |
| POP3 | 110 |
| HTTPS | 443 |
동작하는 애플리케이션마다 각각의 포트 번호가 있어서, 다른 애플리케이션과 서로 구분됨. 데이터를 전송할 때 어떤 애플리케이션으로 데이터를 보낼지 구분하기 위해서는 포트번호 필요함.
웹 브라우저 접속 시 클라이언트 측 출발지 포트 번호는 임의로 할당된다.
TCP와 달리 효율성에 초점을 맞추느 통신 프로토콜.

UDP의 경우 UDP와 데이터의 묶음을 데이터그램이라 부른다.

UDP를 사용할 경우, LAN에 속한 컴퓨터나 네트워크 장비로 데이터를 일괄로 보낼 수 있음. 이를 브로드캐스트(broadcast)라 한다.
https://www.howtouselinux.com/post/understanding-tcp-sequence-number/