CS정리/컴퓨터 네트워크
[컴퓨터 네트워크] TCP, UDP, IP 헤더 소개 및 설명
freelini
2022. 3. 18. 19:44
TCP 헤더 소개
- TCP는 연결 지향형(Connection-Oriented) 서비스를 제공하고 신뢰성 있는 데이터 전송을 보장.
- 전송을 보장하는 것은 TCP 헤더 내의 필드에 의해 가능한 것. 누락된 segment를 수신 확인 후 다시 전송해줌.
- 그 예시로 위 사진을 보면, 수신한 PC B가 3번과 4번 segment를 받지 못하였을 때
- (비효율적 방법, 왼쪽 사진의 경우) PC B가 3번부터 다시 보내달라고 응답한 경우, 3~10번까지 다시 보내주어 중복으로 다시 받는다는 단점이 있음.
- (효율적 방법, 오른쪽 사진의 경우) PC B가 3번부터 못받았고 5-10번은 잘 받았다고 응답한 경우, PC A는 3,4번만 누락된 것을 확인하여 중복으로 모든 segment를 보내지 않고 누락된 segment 번호만 효율적으로 다시 전송할 수 있음.
- 그 예시로 위 사진을 보면, 수신한 PC B가 3번과 4번 segment를 받지 못하였을 때
TCP 헤더 구성 요소
- 출발지 포트번호(Source Port Number) : 출발지 호스트의 포트 번호를 정의한 16비트 필드이며, 임의(randomized) 번호를 사용
- 목적지 포트번호(Destination Port Number) : 목적지 호스트의 포트 번호를 정의한 16비트 필드이며, 주로 Well-Known 포트 번호임
- 순서 번호(Sequence Number) : TCP 세그먼트에 대한 순서번호를 표시하며, 목적지에서 재조립할 때 사용.
- (예시) A에서 B로 10 mega를 보내고 싶을 때 1500 byte씩 잘라서 보내야함. 이때 도착할 때 뒤섞이지 않게 번호를 매겨서 수신시 제대로 조립할 수 있도록 하는 번호
- 확인응답 번호(Acknowledge Number) : 수신 장치에서 발신 장치로 세그먼트의 전송 성공 여부를 알려주기 위해서 사용
- 헤더길이(Header Length) : TCP 헤더의 길이는 최서 20byte에서 최대 60byte가 될 수 있음
- 예약(Reserve) : 현재는 사용하지 않고 예약된 필드
- URG(Urgent) : 긴급 데이터가 TCP 페이로드(payload)에 포함되어 있음을 알리는 필드로, 만약 이 비트가 1이면 우선적으로 처리
- TCP는 원래 데이터를 보낼 때 FCFS(first come first serve) 또는 FIFO(first in first out)로 처리. 단, URG가 1일 경우 급한 데이터 먼저 처리하고 마저 이어서 처리함
- ACK(Acknowledgement) : TCP 세그먼트들에 대한 수신 확인을 알리기 위해 사용되며, 이 비트가 1이면 수신 확인 응답 번호 이전까지의 모든 세그먼트들을 잘 받았음을 의미함
- PSH(Push) : 푸시 요청으로 긴급한 데이터가 아닌 데이터를 빨리 처리하도록 요청
- RSVP(Research Reservation Protocol)을 사용하여 경로를 미리 예약하는 방식. URG와 다른 방식 사용
- RST(Reset) : TCP 세션을 리셋하기 위한 제어 비트
- SYN(Synchronization) : 통신을 개시하고자 하는 두 호스트 간의 세션 초기화 및 순서 번호 동기화
- FIN(Final) : TCP 세션 종료에 사용되는 제어 비트. TCP는 끝날 때 반드시 final 메세지를 주고 받아야 함.
- TCP 검사합(TCP Checksum) : 데이터 오류 검사
- 윈도우 크기(Windows Size) : 수신 확인 응답 번호의 수신 없이 전송할 수 있는 데이터의 양을 지정.
- 데이터를 잘라서 보낼 때 한 번 보낼 때 얼마만큼의 크기로 보내는지 알 수 있음. 직접 몇 개 왔는지 확인하는게 아니라 사이즈를 알려줘서 빠르게 처리 가능하도록 도움
- 긴급 포인트(Urgent Pointer) : TCP 페이로드 내의 어떤 곳에 긴급한 데이터가 있는지 명시하여, 1로 설정되어 있을 경우 유효
- 옵션(Option) : 최대 40바이트이며, TCP 통신과 관련된 추가적 옵션이 위치함
- 데이터(Data)
UDP 헤더 소개
- UDP는 송수신 장치 간에 비연결형(Connection-less) 서비스 지원
- UDP 또한 TCP와 마찬가지로 전송 계층에서 동작하며, 포트 번호를 기반으로 통신
- 단, TCP와 달리 수신한 데이터에 대하여 수신 확인 응답을 하지 않음
- TCP보다 헤더가 간단하며, TCP에서 지원하는 다양한 데이터 흐름 제어 기능을 수행하지 않음
- 송수신 절차가 비교적 간단하고 오류 제어 기능 정도만 제공하여 소량의 데이터 전송이나 실시간 데이터 전송에 효과적으로 사용
- 간혹 TCP의 기능이 필요한 경우에는 애플리케이션으로 프로그램을 이용하여 보완
UDP 헤더 구성 요소
- 출발지 포트번호(Source Port Number) : 출발지 호스트의 포트 번호를 정의한 16비트 필드이며, 임의(randomized) 번호 사용
- 목적지 포트번호(Destination Port Number) : 목적지 호스트의 포트 번호를 정의한 16비트 필드이며, 주로 Well-Known 포트 번호 사용
- 길이(Total Length) : 헤더와 데이터를 포함한 UDP 데이터 그램의 전체 길이를 나타냄
- 검사합(Checksum) : 헤더와 데이터를 포함한 UDP 데이터 그램의 전체 길이를 나타냄. 오류 제어에 사용됨.
IP 헤더 소개
- OSI 7 Layer 3계층에서 패킷을 출발지에서 목적지까지 전달하는데 사용
- IP는 최선형(Best Effort) 서비스 기반으로 패킷을 전달하며, 패킷의 도착을 보증하지는 않음
- 또한 IP는 비신뢰성을 가지며, 데이터 흐름에 관여하지 않음
- 즉, 패킷이 중간에 손실되거나 손상될 수 있는 단점이 있음 → 이를 보완하는 재전송 기능은 TCP에 있기에 TCP/IP*가 많이 사용됨. (UDP에는 재전송 기능이 없기에 TCP/IP가 더 유용)
- 상위 계층의 TCP와 같은 신뢰성 프로토콜을 사용하여 최선형 서비스의 단점 보완
- 목적지에 도착한 패킷들의 순서가 순차적이 아닐 수 있음
- v4의 주소 부족 문제로 인하여 v6가 대안으로 제시되었으며, 현재의 네트워크는 IPv4와 IPv6를 동시에 사용하고 있음
TCP/IP*란 : IP 기반으로 TCP를 사용하는 것. 패킷을 보낼 때 장치의 주소를 정의해주어야 하기에 IP가 필수적으로 포함하여야 하며, IP 기반으로 데이터 전달 가능. IP 기반으로 UDP를 사용하는 UDP/IP와 달리 패킷 재전송 기능이 TCP에 있어 신뢰성을 가지며 널리 사용됨. UDP/IP의 경우, 보내는 중에 오류가 나도 따로 대처할 방법이 없다는 단점이 있음
IP 헤더의 구성 요소
- 버전(Version) : IP 프로토콜의 버전을 나타냄 (IPv4 or IPv6)
- 헤더 길이(Header Length) : 옵션을 포함할 경우, 최대 60byte까지 사용 가능하며, 최소 단위는 20byte임
- TOS(Type of Service) : 우선 순위를 나타내는 필드. 3bit의 Precedence 값과 4비트의 서비스 유형을 지정 및 사용하지 않는 1비트로 구성
- QOS(Quality of Service)와 관련되어 있음. QOS는 새치기로, 나중에 들어온 데이터를 먼저 처리함. urgent와 push랑 다른 개념으로 훨씬 기능이 다양하고 라우터가 직접 마킹하여 전달하기에 차이점이 있음.
- 전체 길이(Total Length) : 헤더와 데이터를 포함한 패킷의 전체 길이를 나타냄
- 식별자(Identification Number*) : 생성되는 패킷에 부여되는 고유 번호이며, 패킷은 2계층 프로토콜의 최대 전송 단위(MTU) 값에 따라 여러 개의 프래그먼트로 분할하고, 원래의 패킷으로 재조립하고자 할 경우, 이 식별자 값을 기준을 ㅗ사용
- 플래그(Flags) : IP 패킷의 분할 가능 여부와 마지막 프래그먼트인지 아닌지 알리기 위해 사용
- 분할 위치(Fragment Offset**) : 하나의 패킷이 여러 개의 프래그먼트로 분할될 때 원래 패킷이 어디에 있었는지 명시. 또한, 이 값을 이용하여 원래의 패킷으로 재조립됨
- TTL(Time-to-Live) : 패킷의 루핑(Looping)을 막기 위해 사용되며 패킷의 수명을 나타냄. 이 값은 라우터를 지날 때마다 1씩 감소(-1)되며, 이 값이 0이 된다면 해당 패킷을 폐기함.
- 프로토콜(Protocol) : TCP 세그먼트이면 6, UDP 세그먼트이면 17의 값을 가짐 (TCP가 오는지 UDP가 오는지에 따라 값이 달라짐)
- 헤더 체크섬(Header Checksum) : IP 헤더 오류 여부 검사
- 출발지 IP 주소(Source IP Address) : 출발 장치의 IP 주소
- 목적지 IP 주소(Destination IP Address) : 목적지 장치의 IP 주소를 의미함
- 옵션(Option) : 패킷의 전송 경로로 포함한 IP 프로토콜의 동작 옵션을 정의
<헷갈리는 용어 정리>
Fragment Offset** vs. Sequence Number vs. Identification Number*
- Sequence Number : 32 Bit number used for byte-level numbering of TCP segments.
- Fragment offset : helps the destination device to place the fragments in the proper sequence to build the original packet.
- Identification Number : All the fragments of the same packet have the same identification number to allow the receiving device to identify all the fragments of a single packet.
TCP/IP의 캡슐화와 역캡슐화
- TCP/IP 캡슐화(Encapsulation) 예시는 왼쪽 사진처럼 웹 서버에서 웹 클라이언트로 보내지는 경우, TCP/IP 역캡슐화(De-encapsulation)의 예시는 오른쪽 예시처럼 웹 클라이언트에서 웹 서버로 보내지는 경우임