TCP: Difference between revisions
From IT Wiki
No edit summary |
(→TCP 헤더) |
||
Line 23: | Line 23: | ||
* Reserved : 예약된 필드, 현재 사용되지 않음 | * Reserved : 예약된 필드, 현재 사용되지 않음 | ||
* Window : 자신의 수신 버퍼 여유용량 크기를 통보하여 얼마만큼의 데이터를 받을 수 있는지 상대방에게 알려주어 흐름제어를 수행하게 되는 필드 | * Window : 자신의 수신 버퍼 여유용량 크기를 통보하여 얼마만큼의 데이터를 받을 수 있는지 상대방에게 알려주어 흐름제어를 수행하게 되는 필드 | ||
* TCP | * [[TCP 제어 플래그]] | ||
** U (Urgent) : 긴급 비트, 내가 지금 보내는 데이터가 우선순위가 높음. Urgnet Pointer와 세트 | ** U (Urgent) : 긴급 비트, 내가 지금 보내는 데이터가 우선순위가 높음. Urgnet Pointer와 세트 | ||
** A (Ack) : 승인 비트, 물어본거에 대한 응답을 해줄 때 사용됨 | ** A (Ack) : 승인 비트, 물어본거에 대한 응답을 해줄 때 사용됨 |
Latest revision as of 20:08, 3 February 2022
- Transmission Control Protocol
- 양종단 호스트 내 프로세스 상호 간에 신뢰적인 연결지향성 서비스를 제공하는 전송 계층 프로토콜
TCP의 특징[edit | edit source]
- 신뢰성 있는 연결을 지향한다.
- 세그먼트에 순번을 지정하여 데이터의 순서를 유지한다.
- 3-Way Handshaking을 통해 연결하고 4-Way Handshaking을 통해 연결을 종료한다.
TCP 헤더[edit | edit source]
- Source Port : 출발지 포트번호
- Destination Port : 목적지 포트번호
- Sequence Number : 바이트 단위로 순서화되는 번호로, 이것을 통해 신뢰성(3-Way Handshake) 및 흐름제어(sliding Window) 기능 제공
- Acknowledgment Number : 수신하기를 기대하는 다음 byte 번호 (마지막으로 수신에 성공한 번호의 +1)
- Offset : 헤더 길이 필드이며 IPv4와 마찬가지로 나누기 4 계산 후 2진수로 작성됨
- Reserved : 예약된 필드, 현재 사용되지 않음
- Window : 자신의 수신 버퍼 여유용량 크기를 통보하여 얼마만큼의 데이터를 받을 수 있는지 상대방에게 알려주어 흐름제어를 수행하게 되는 필드
- TCP 제어 플래그
- U (Urgent) : 긴급 비트, 내가 지금 보내는 데이터가 우선순위가 높음. Urgnet Pointer와 세트
- A (Ack) : 승인 비트, 물어본거에 대한 응답을 해줄 때 사용됨
- P (Push) : 밀어넣기 비트, TCP 버퍼가 일정한 크기만큼 쌓여야 하는데 이거 상관없이 데이터를 계속 밀어 넣겠다
- R (Reset) : 초기화 비트, 상대방과 연결이 되어있는 상태에서 어떤 문제 등이 발생하여 연결 상태를 리셋하게 됨
- S (Syn) : 동기화 비트, 상대방과 연결을 시작할때 무조건 사용되는 플레그
- F (Fin) : 종료 비트
- Urgent Pointer : 어디서부터 긴급 값인지 알려주는 플래그 (TCP Flags의 U와 세트)
플래그[edit | edit source]
- 좀 더 상세한 내용은 TCP 제어 플래그 문서 참조
- SYN : TCP Connection의 최초 접속 시 연결을 요구하는 플래그
- ACK : 응답 확인 플래그
- PSH : 데이터를 버퍼링하지 않고 즉석에서 수신자에게 송신하는 것을 요구하는 플래그
- URG : 긴급 포인터 플래그
- FIN : 접속 종료 플래그 (정상 종료)
- RST : 접속 종료를 위한 리셋 플래그 (강제 종료)
3-Way Handshaking[edit | edit source]
- TCP 연결 수립 과정
4-Way Handshaking[edit | edit source]
- TCP 연결 종료 과정
- [Client(FIN_WAIT1) -> Server(CLOSE_WAIT)] FIN+ACK
- [Client(FIN_WATI2) <- Server(CLOSE_WAIT)] ACK
- [Client(TIME_WAIT) <- Server(LAST_ACK)] FIN+ACK
- [Client(TIME_WAIT) -> Server(CLOSED] ACK