TCP

- Transport layer에 존재하는 전송제어 프로토콜이다.
Port 번호
- protocol에 따라 부여된 port 번호가 있어 protocol알면 port번호를 알 수 있다.
- 예시
- 20,21 FTP
- 23 TELNET
- 25 SMTP (Simple Mail Transfer Protocol)
- 80 HTTP
- IP 주소를 알아서 PORT 번호 모르면 접근할 수 없다.
TCP 전송방식

- 정해진 byte 크기로 잘라서 전송한다.
- sending buffer과 receive buffer가 존재한다.
TCP 구조

Sequence Number
- byte단위로 데이터를 보낼 때 데이터에 붙는 임의적인 번호
Acknowledgment field
- 잘 받았는지 확인용
- 다음에 어느 부분부터 받으면 되는지를 보낸다.
- Cumulative ACK : 다음에 받아야할 번호를 말함.
- sender(data) : #101
- receiver(ACK) : #201
- sender : #201
- receiver : 301
- if Selective ACK : 받은 걸 알려줌 -> sender : #101, receiver : #101
HLEN
- Header의 길이는 최소 20byte 최대 60byte이다.
- 표현할 수 있는 값은 0~15로 * 4 해주면 진짜 header 크기가 나온다.
- 이는 60을 표현하기 위해서는 6bit가 필요한데 이런 식으로 계산하면 2bit를 아낄 수 있기 때문이다.
Control Field
- ACK : ACK이 유효한 숫자인가를 나타냄
- SYN : Sequence Number를 보낸다.
- FIN : 연결을 끊을 때 보낸다.
Checksum

- 송신 도중에 생길 수 있는 오류를 체크하는 용도
- header와 pseudoheader을 16bit씩 자른 다음 그 조각들을 다 더한 후에 그 값의 보수를 계산하면 그것이 checksum이다.
- pseudoheader는 IP header의 내용을 가져와 사용하고 계산 후 버린다.
- TCP에서 이는 필수이다.