OSI 7계층 참조 모델의 세션, 표현, 응용(session, presentation, application) 계층의 역할을 수행하는 계층
사용자 데이터 처리 계층
HTTP, HTTPS, FTP, SMTP, PoP3, DNS 등
TCP 헤더
TCP의 신뢰성 통신
-> ack3은 2번 seg까지 오류 없이 수신했다는 것을 의미, ack3 수신 -> 3번 seg부터 모든 seg를 전송
TCP 헤더
TCP는 연결 지향형(Connection-Oriented) 서비스를 제공하고 신뢰성 있는 데이터 전송을 보장, 이러한 기능은 TCP 헤더 내의 필드에 의해서 가능
출발지 포트 번호(Source Port Number): 출발지 호스트의 포트 번호를 정의한 16비트 필드, 임의 번호 사용
목적지 포트 번호(Destination Port Number): 목적지 호스트의 포트 번호를 정의한 16비트 필드, 주로 Well-Known 포트 번호
순서 번호(Sequence Number): TCP segment에 대한 순서번호를 표시, segment data를 재조립할 때 사용
수신 확인 응답 번호(Acknowledgement Number): 수신 장치에서 발신 장치로 segment의 전송 성공 여부를 알려주기 위해서 사용
헤더 길이(Header Length): TCP 헤더의 길이를 정의 -> 헤더 길이에 암묵적으로 4를 곱함(TCP Header의 크기는 기본 20byte ~ 60byte) -> 기본적으로 0101(5)로 표시되어 있으나, 4를 곱하여 생각(~1111(15) * 4 -> 60byte)
예약 비트(Reversed): 표준 정의 당시, 추후 추가 혹은 업데이트되는 내용을 위해 예약된 필드
TCP flags -> 6비트의 control flag
URG(Urgent): 긴급 데이터가 TCP 페이로드(payload)에 포함되어 있음을 알리는 필드, 이 비트가 1이면 우선적으로 처리
ACK(Acknowledgement): TCP segment들에 대한 수신 확인을 알리기 위해 사용되며, 이 비트가 1이면 수신 확인 응답 번호 이전까지의 모든 segment들을 잘 받았음을 의미
PSH(Push): 푸시 요청 -> 긴급한 데이터가 아닌 데이터를 빨리 처리하도록 요청
RST(Reset): TCP 세션 리셋을 위한 제어 비트
SYN(Synchronization): 통신을 개시하고자 하는 두 호스트 간의 세션 초기화 및 순서 번호 동기화
FIN(Final): TCP 세션 종료에 사용하는 제어 비트
윈도우 크기(Window Size): 수신 확인 응답 번호의 수신 없이 전송할 수 있는 데이터 양을 정의
왼쪽은 수신 즉시 송신하여 win size가 유지, 오른쪽은 수신 즉시 송신하지 못하여 win size가 증가하는 모습
TCP Checksum: TCP 패킷 오류 검사 필드, 수신 장치는 이 값을 이용하여 데이터 무결성 확인
긴급 포인터(Urgent Pointer): 긴급 데이터가 있는 지점을 가리키는 포인터 -> 긴급 데이터가 끝나는 지점
옵션(Option): 최소 0에서 최대 40바이트, TCP 통신에 대한 제어 및 관리를 위한 추가 옵션
송수신 절차가 비교적 간단, 오류 검출 기능 제공으로 소량의 데이터 전송이나 실시간 데이터 전송에 효과적
비연결형 서비스 -> 데이터그램 간의 전후 관계를 고려하지 않고(sequence number 없음) 전송
출발지 포트 번호: 출발지 호스트의 포트 번호를 정의, 16비트 필드, 임의 번호
목적지 포트 번호: 목적지 호스트의 포트 번호를 정의, 16비트 필드, 주로 Well-Known 포트 번호
길이: 헤더와 데이터를 포함한 UDP 데이터 그램의 전체 길이
체크섬: 헤더와 데이터를 포함한 UDP 데이터 그램의 오류 검사
IP 헤더
OSI 7 Layer 3계층 기준으로 패킷을 출발지에서 목적지까지 전달하는데 사용
IP는 최선형(Best Effort) 서비스 기반으로 패킷 전달 -> 패킷이 목적지에 도착함을 보장하지는 못함. -> 패킷은 전송 도중 손실되거나 손상될 수 있다.
상위 계층의 TCP와 같은 신뢰성 프로토콜을 사용하여 최선형 서비스의 단점을 보완 -> TCP/IP
IP 패킷 -> 출발지 장치가 전송한 순서대로 목적지 장치에 도착하지 않을 수 있음
IPv4: 주소 고갈&보안 이슈 -> 버전6
버전(Version): IP 프로토콜의 버전을 나타냄
헤더 길이(Header Length): 옵션을 포함할 경우 최대 60바이트까지 사용 가능, 최소 단위는 20바이트
DSCP(Differentiated Services Code Points): ToS(Type of Service) 필드로 불렸던 패킷의 우선 순위를 나타내는 필드
ToS
출처: https://operatingsystems.tistory.com/entry/Type-of-Service-Differentiated-Service
패킷의 성격(속도 or 신뢰성 우선)에 따라 데이터 전송 우선순위를 결정
ECN(Explicit Congestion Notification): 패킷이 전송 경로에서 혼잡을 경험했을 때, 이를 발견하고 상대방에게 경고를 보냄. 명시적으로 네트워크에 혼잡이 있음을 알리는 필드 -> 전송 도중에 있던 혼잡을 목적지에 전달(foward ECN) -> 수신지에서 송신지로 다시 그 정보를 보내는 과정(backward ECN)
전체 길이(Total Length): 헤더와 데이터를 포함한 패킷의 전체 길이를 나타냄
식별자(Identification): 생성되는 패킷에 부여되는 고유한 값 -> 목적지에 도착한 패킷들은 이 식별자 값을 기준으로 원래 순서대로 재조립된다.
플래그(Flags): IP패킷의 분할 가능 여부, 마지막 fragment인지 아닌지 알리기 위해 사용
분할 위치(Fragment Offset): 하나의 패킷은 2계층 프로토콜의 MTU(Maximum Transmit Unit; 최대 전송 단위)에 따라 여러 개의 fragment로 분할되어 전송 -> 각각의 분할된 frag가 원래의 패킷을 기준으로 어느 위치에 있었는지 명시하기 위한 offset 값
IP packet을 frame으로 분할 body를 자를 때, header(20byte)는 매번 카피해서 자른 body(1480byte)에 붙여줌 -> fragment fragment를 다시 IP로 복원할 때, 순서가 필요한데 그것이 Frag offset -> 0번째부터 얼마나 떨어져 있느냐 또한, flags를 통해서 마지막 frag를 확인하면, 해당 frag를 기준으로 이전에 받은 frag로 IP packet을 재조립 -> 제일 마지막 flag는 more flag가 0
프로토콜 별로 MTU가 다름 -> 이더넷의 경우 대ㅑㄱ 1500byte -> 요즘은 이더넷이면 이더넷에 맞게 IP 패킷을 1460byte 맞춰서 제작 + 헤더(20) + 헤더(20)
TTL(Time-to-Live): 패킷의 루핑(looping)을 막기 위해 사용하는 패킷의 수명을 나타내는 값. 라우터 통과 시마다 1씩 감소, 이 값이 0이 되면 패킷은 폐기 -> UDP의 경우는 괜찮지만, 재전송을 요구하는 protocol의 경우에는, 루핑하는 패킷에 재전송 요청을 반복하면서 통신 혼잡을 가중화