티스토리 뷰
TCP
TCP는 전송계층의 프로토콜로써 IP 프로토콜 위에서 연결형 서비스를 지원한다. 전송계층의 PDU(Protocol Data Unit) 즉, 전송단위를 세그먼트라고 칭하며, 세그먼트의는 네트워크 부하, 윈도우 크기 등의 영향을 받아 가변 크기를 지원한다.
TCP 헤더 구조
TCP 세그먼트는 (헤더 + 전송데이터)로 이루어져있으며 헤더의 최소 크기는 20바이트 최대 60바이트이다.
TCP 헤더의 필드
Source/Destination Port
송수신 프로세스에 할당된 포트주소이다. IP는 호스트를 구분하기 위해 사용되며 포트번호는 프로세스를 구분하기 위해 사용된다. 포트번호는 TCP와 UDP에서 별도의 주소를 가지기 때문에 같은 번호를 사용할 수 있다.
Sequence Number(순서번호)
송신 프로세스가 지정하는 세그먼트의 순서번호이다. TCP 전송데이터의 바이트마다 순서번호가 존재하며 최대 32비트를 표현할 수 있으므로 쉽게 중복되지 않는다. 세그먼트가 없는경우(연결설정, 연결해제)에도 순서번호는 증가한다.
Acknowledgement Number(응답번호)
수신 프로세스가 수신완료한 바이트의 수를 응답하기 위해 사용한다. 다음에 수신을 기대하는 데이터의 순서번호를 보냄으로써 송신 프로세스는 (응답번호 - 1)번 까지의 순서번호를 가진 데이터가 올바르게 전송되었음을 확인할 수 있다.
Data Offset(데이터 옵셋)
세그먼트 시작 위치를 기준으로 데이터의 시작위치(=헤더의 크기)를 나타낸다.
Reserved(예약)
예약 필드이다. 실제로 사용되지 않는다.
Window
슬라이딩 윈도우 프로토콜(흐름제어)을 위해 사용된다. 송신자에게 수신 버퍼가 수신할 수 있는 용량을 알려준다. 버퍼가 수신할 수 없게되면 필드 값을 0으로 지정해 송신프로세스에게 데이터를 수신할 수 없는 상태임을 알려준다.
Checksum
TCP 세그먼트에 포함된 헤더와 데이터의 변형을 검출하기 위해 사용한다.
Urgent Pointer(긴급 포인터)
긴급데이터를 처리하기 위해 사용된다. 긴급포인터가 100이라면 현재 순서번호를 포함한 100개의 순서번호를 가진 세그먼트는 긴급 데이터임을 뜻한다.
Options
부가정보를 전달하며 최대 40바이트까지 크기를 가질 수 있으며, 일반적으로 TCP의 헤더가 20 바이드가 되도록 하기위해 비어있다.
Padding
헤더 크기를 4 바이트의 배수로 맞추기 위해 사용되며 생략할 수 있다.
플래그 비트
플래그 비트들의 필드 값이 1일 경우 의미를 가진다. PSH와 URG는 실제로는 사용되지 않으며, RST, SYN, FIN 비트는 연결 설정과 해제에 사용된다.
URG : Urgent Pointer 필드가 유효한지 나타낸다.
ACK : Acknowledgement Number(응답번호)필드가 유효한지 나타낸다. 연결 설정 세그먼트를 제외하면 모든 세그먼트의 ACK 비트는 1이라고 할 수 있다.
PSH : 수신프로세스가 데이터를 상위계층에 즉시 전달해야함을 의미한다.
RST : 연결 리셋 혹은 유효하지 않은 세그먼트에 대한 응답용이다. 송신했지만 도착하지 않은 세그먼트, 긍정응답이 도착하지 않은 세그먼트는 연결이 재설정 되었을 때 반드시 재전송되어야한다.
SYN : 연결 설정 요구를 의미하는 플래그 비트므로 가상 회선 연결을 설정하는 과정에서 사용된다.
FIN : 한쪽 프로세서에서 더는 전송할 데이터가 없어 연결을 종료하고 싶다는 의사 표시를 상대방에게 알리는 데 사용한다. 현재 전송중인 데이터는 처리할 수 있으며 양쪽 프로세스 모두가 FIN 플래그를 전송하면 연결 해제가 이루어진다.
함께보면 좋은 글
'Computer Science > Network' 카테고리의 다른 글
모든 개발자를 위한 HTTP 웹 기본 지식 - HTTP 메소드 (0) | 2022.09.17 |
---|---|
모든 개발자를 위한 HTTP 웹 기본 지식 - HTTP 기본 (0) | 2022.09.17 |
모든 개발자를 위한 HTTP 웹 기본 지식 - URI와 웹 브라우저 요청 흐름 (0) | 2022.09.17 |
모든 개발자를 위한 HTTP 웹 기본 지식 - 인터넷 네트워크 (0) | 2022.09.17 |
[네크워크] IPv4 데이터그램(헤더) 형식 (0) | 2022.08.12 |
- Total
- Today
- Yesterday
- 국비교육
- 이클립스
- HeidiSQL
- 오라클
- 데이터베이스
- 환경설정
- C
- SQL
- Open API
- Java
- 스프링부트
- C++
- JSP
- JVM
- 인턴
- CSS
- svn
- 백준
- 스프링
- 부트스트랩
- 개발용어
- CS
- 넥사크로
- 오류
- 네트워크
- 프로그래머스
- Thymeleaf
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |