TCP 프로토콜(Protocol)

오늘은 TCP 프로토콜에 대해서 알아보겠습니다.


참고 문서입니다.

​

TCP 헤더 형식입니다.


위의 숫자(0~31)는 비트 수를 나타냅니다.

​

TCP는 포트 번호로 찾습니다.

그래서 Source Port(시작 포트)와 Destination Port(도착 포트)가 있습니다.

​

Sequence Number로 자신의 번호를 알려줍니다.

​

Acknowledgment Number로 상대방의 번호를 보냅니다.

​

Control Bits로는 URG, ACK, PSH, RST, SYN, FIN이 있습니다.

​

Window는 데이터의 흐름을 제어합니다.





TCP 연결 상태표입니다.

CLOSED : 연결 상태가 없다는 뜻입니다.

LISTEN : 포트가 열린 상태로, 연결이 들어오길 기다리는 상태입니다.

SYN-SENT : 상대에게 SYN을 보낸 상태입니다. 상대의 ACK와 SYN을 기다립니다.

SYN-RECEIVED : SYN을 받고, ACK와 SYN을 보낸 상태입니다.

ESTABLISHED : 연결이 완료된 상태로, 데이터 교환이 가능합니다.

FIN-WAIT-1 : FIN을 보낸 상태입니다. FIN의 ACK를 기다립니다.

FIN-WAIT-2 : 상대의 FIN을 기다립니다.

CLOSING :  상대의 FIN에 대한 ACK를 기다립니다.

TIME-WAIT : 상대가 FIN의 ACK를 받을 시간을 기다립니다.

CLOSE-WAIT : FIN을 받고 ACK를 보낸 상태입니다. 종료를 기다립니다.

LAST-ACK : FIN을 보낸 상태고, 마지막 ACK를 기다립니다.

CLOSED : 포트가 닫힙니다.








기본적인 연결 구조입니다.

SEQ에 자기 번호를

ACK에는 상대방 번호를 적어줍니다.

​

DATA를 보낼 때에 Sequence Number는 증가하지 않습니다.

​

​

RST는 잘못된 상태를 바로잡아줍니다.


RST를 받으면, LISTEN 상태가 되거나, CLOSED 상태가 됩니다.

​

​

일반적인 종료 방식입니다.

여기서 알 수 있는 것은, 먼저 FIN을 보낸 쪽이, FIN-WAIT 상태로 되고, 받는 쪽은 CLOSE-WAIT 상태가 됩니다.




PUSH는 전달되어야 할 데이터가 포함되었다는 뜻입니다.




끝.


카테고리: tcp, network

댓글

이 블로그의 인기 게시물

Python urllib.parse.quote()

음악 총보(Score), 파트보(Part)

KiCad 시작하기 4 (기존 회로도 수정 및 추가)

Android 특정 SDK Version 설정하기

일본어 문장부호

Kivy 시작하기 12 (Pyinstaller로 exe 파일 만들기)

Android Compose Hilt

KiCad 시작하기 6 (FreeRoute 사용하기 1)

Python urllib.request.urlopen()

음악 악상기호(Musical symbols)