04-03. TCP 프로토콜
[기능]
- Transmission Control Protocol, 전송 제어 프로토콜
- 안정적으로, 순서대로, 에러 없는 연결을 지향
- UDP보다 안전하지만 느림
[구조]
1 | 2 | 3 | 4 | Byte | |
Source Port | Destination Port | 4 | |||
Sequence Number | 8 | ||||
Acknowledgment Number | 12 | ||||
Offset | Reserved | TCP Flags | Window | 16 | |
Checksum | Urgent Pointer | 20 | |||
TCP Option (개당 4byte) | 24~ |
- 20 바이트+α (옵션에 따라)
- Source Port : 출발지 포트번호
- Destination Port : 목적지 포트번호
- Sequence Number : 패킷의 순서번호 (패킷 신뢰성 및 흐름제어, 초기번호 랜덤, 동기화 후 Seq번호=수신 Ack 번호)
- Acknowledgment Number : Sequence number에 대한 응답 번호 (Seq 번호 + 수신 payload 크기 || 1), 초기번호 0
- Offset : 헤더 길이(최소 20, 최대 60) ÷ 4의 값 ≫ (0x5 ~ 0xF)
- Reserved : 예약된 필드 (사용하지 않음)
- TCP Flags : 연결의 종류를 지정하는 8비트 플래그 옵션, 0b00000000 C E U A P R S F
◎ U(Urgent) : 긴급비트, 우선순위가 높은 데이터임을 표기, Urgent 포인터와 세트 ( 0b00100000 )
◎ A(Ack) : 승인비트, Acknowledgment 요청에 대한 승인 응답을 나타냄, ( 0b00010000 )
◎ P(PSH) : 밀어넣기 비트, Push, TCP 버퍼가 찰 때까지 기다리지 않고 데이터를 밀어넣겠다 ( 0b00001000 )
◎ R(RST) : 초기화 비트, Reset, 연결 상태 초기화( 0b00000100 )
◎ S(SYN) : 동기화비트, Synchronize, 상대와 연결을 시작할 때 무조건 사용, 연결상태 동기화 ( 0b00000010 )
◎ F(FIN) : 종료비트, Finish, 연결을 끊을 때 사용 ( 0b00000001 )
* TCP buffer : 일정한 크기만큼 데이터를 쌓아서 전송
- Window : 통신상대에게 TCP 버퍼(사용 가능한 공간)가 얼마나 남아있는지 알려줌 ( ~~ 만큼 더 보내 )
- Checksum : 헤더 오류 확인(필드값 계산 후 세팅 후 전송 ≫ 받는 쪽에서 다시 계산 후 확인)
- Urgent Pointer : 긴급 데이터의 위치를 가르킴
- TCP Option : 옵션이 증가할 때 마다 4바이트씩 추가됨 (최대 10개 ≫ 40 Byte가 추가로 붙을 수 있다)
[통신과정]
1. 연결수립과정 3way handshake
- TCP를 이용한 데이터 통신에서 프로세스와 프로세스를 연결하기 위해 가장 먼저 수행하는 과정
1) 클라이언트 → (요청패킷) → 서버 (SYN 플래그 2 세팅 0x02)
2) 서버 ← (요청 수락 패킷) ← 클라이언트 (ACK 플래그 16 + SYN 플래그 2 세팅 0x12)
3) 클라이언트 → (최종 수락 패킷) → 서버 (ACK 플래그 16 세팅 0x10)
* 이 때는 단순 연결수립 과정이기 때문에 TCP 뒤에 payload가 없다
2. 데이터 송수신과정
- 연결이 완료된 후 HTTP나 FTP같은 각종 데이터를 포함한 통신
- 연결수립 과정의 마지막 Seq 번호와 Ack 번호에서 이어간다
- 보낸 쪽에서 또 보낼 때는 Seq 번호와 Ack 번호가 동일
- 응답측 Seq 번호 = 이전에 수신한 Ack 번호
- 응답측 Ack 번호 = 이전에 수신한 Seq 번호 + 데이터 크기
[상태 전이도]
- Listen : 서버가 포트를 열어놓은 상태, 언제든지 연결 가능
- Established : 서버와 클라이언트간의 연결이 수립된 상태 ( 3 way handshake 이후 )
'개념정리 > 네트워크' 카테고리의 다른 글
[네트워크] 06. HTTP 프로토콜 (7계층) (0) | 2020.11.05 |
---|---|
[네트워크] 05. NAT와 포트포워딩 (0) | 2020.11.02 |
[네트워크] 04-2. UDP 프로토콜 (0) | 2020.10.28 |
[네트워크] 04. OSI 7 Layer - 4계층 Transport (0) | 2020.10.22 |
[네트워크] 03-4. ICMP 프로토콜 (0) | 2020.10.20 |