UDP (User Datagram Protocol, 사용자 데이터그램 프로토콜)
-
인터넷 프로토콜 스위트의 주요 프로토콜 가운데 하나로, 데이터그램으로 알려진 단문 메시지를 교환하기 위해서 사용
-
연결을 설정하지 않고 수신자가 데이터를 받을 준비를 확인하는 단계를 거치지 않고 단방향으로 정보를 전송
- 신뢰성 - 수신자가 메시지를 수신했는지 확인할 수 없음
- 순서 정렬 - 메시지 도착 순서를 예측할 수 없음
- 부하 - TCP 보다 속도가 일반적으로 빠르고 오버헤더가 적음

-
8바이트로 고정
-
출발지 포트, 목적지 포트 : 16비트 → 65,536개
-
길이 : UDP 페이로드와 UDP 헤더를 더한 데이터 그램의 크기
-
오류검사 : 기본적으로 비활성화
TCP(Transmission Control Protocol, 전송 제어 프로토콜)
-
인터넷 프로토콜 스위트(IP)의 핵심 프로토콜 중 하나로, IP와 함께 TCP/IP라는 명칭으로도 널리 불린다. TCP는 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다. TCP는 전송 계층에 위치한다. 네트워크의 정보 전달을 통제하는 프로토콜이자 인터넷을 이루는 핵심 프로토콜의 하나로서 국제 인터넷 표준화 기구(IETF)의 RFC 793에 기술되어 있다.
-
연결 지향형 프로토콜로 수신측이 데이터를 흘려버리지 않게 데이터의 흐름 제어(flow control)와 전송 중 에러가 발생한 경우 자동으로 재전송하는 에러 제어(error control) 등의 기능을 통해 데이터의 확실한 전송을 보장

- TCP 헤더의 크기는 가변적 ⇒ TCP Options에 따라 달라지고 Offset에서 지정
- 출발지와 목적지 포트 : 16비트 → 65,536
- 일련 번호(sequence number)
- 전송하는 데이터의 순서를 의미 → 수신측에서 쪼개진 세그먼트의 순서를 파악해서 재조립할 수 있도록 제공
- 최초로 데이터를 전송할 때는 랜덤한 수로 초기화하고, 이후에는 자신이 보낼 데이터의 1바이트 당 일련번호를 1씩 증가시켜서 데이터의 순서를 표현
- 확인 또는 승인 번호(knowledgement number)
- 수신자가 예상하는 다음 일련 번호를 의미
- 데이터를 주고 받을 때는 상대방이 보낸 일련 번호 + 자신 받은 데이터의 바이트 수
를 확인 번호로 설정
- 연결 설정과 연결 해제 과정에서는 상대방이 보낸 일련 번호 + 1을 확인 번호로 설정 (핸드쉐이킹 과정에서는 데이터를 주고 받지 않음)
- 오프셋
- 전체 세그먼트(TPC 헤더 + TCP 페이로드)에서 헤더가 아닌 데이터가 시작되는 위치(TCP 헤더의 끝 ← TCP 헤더의 크기가 가변적이므로 필요)를 표시
- TCP 플래그 : 현재 세그먼트의 속성
- CWR (Congestion Window Reduced) 혼잡 윈도우 크기 감소 신호
- ECN (Explicit Congestion Notification) 혼잡 신호 발생
- URG (Urgent) 긴급 데이터
- ACK (Acknowledgement) 확인 응답 신호
- PSH (Push) 수신측에 데이터를 최대한 빠르게 응용 프로그램에게 전달
- RST (Reset) 연결을 강제로 초기화해달라는 요청
- SYN (Synchronize) 연결을 생성
- FIN (Finish) 연결을 종료
- 윈도우 크기 : 슬라이딩 윈도우(sliding window) 크기 = 한번에 전송할 수 있는 데이터의 양(크기)
- 오류 검사 : 데이터 송수신 중에 발생하는 오류를 검출하기 위해 사용
- 긴급 포인트 : URG 플래그가 설정된 경우, 해당 데이터를 우선 처리
TCP 동작
-
응용 계층에서 페이로드를 생성하고, 전송 전에 3단계 연결 설정을 수행
- 응용 계층에서 생성한 페이로드를 응용 계층 버퍼에 임시 보관하고 전송 계층에서 SYN 신호를 담은 세그먼트 한 개를 생성
- SYN 세그먼트는 네트워크 계층, 데이터 링크 계층, 물리 계층을 통과해서 수신지로 전달
- 수신측에서는 해당 SYN 신호를 전송 계층까지 끌어올린 후 전송 계층에서 SYN/ACK 신호를 담은 세그먼트를 생성해서 송신지로 전달
- 송신측에서는 해당 SYN/ACK 신호를 전송 계층까지 끌어올린 후 전송 계층에서 ACK 신호를 담은 세그먼트를 생성해서 수신지로 전달해서 3단계 설정을 완료
-
3단계 연결 설정이 완료되면 운영체제는 응용 계층 버퍼에 저장했던 TCP 페이로드를 전송 계층으로 전달
-
전송 계층은 응용 계층에서 전달된 TCP 페이로드를 대상으로 단편화(fragmentation)를 수행
- 단편화(fragmentation): 전송 효율성과 데이터 기밀성을 위해 TCP 페이로드를 여러 개로 분할하는 기법
-
단편화가 끝나면 조각난 페이로드 앞에 출발지 포트와 목적지 포트 등을 담은 헤더가 붙으면서 여러 개의 세그먼트를 생성하고, 각 세그먼트는 네트워크 계층으로 넘가면서 각각의 패킷을 생성
TCP 연결 설정 (3-way handshaking)

연결종료(4-way handshake)

IP 헤더
네트워크 계층(L3)에서 각 세그먼트/데이터그램 앞에 IP 주소를 추가한 것

- 일반적으로 IP 헤더는 20바이트 크기를 사용 (IP Option 항목을 이용해 21바이트 이상으로 사용이 가능)
- 서비스 종류(Type of Service) : 해당 패킷의 전송 우선 순위를 지정 (회선이 혼잡할 경우 패킷의 전송 우선 순위를 부여할 때 사용)
- 전체 길이 : IP 헤더를 포함한 패킷 전체의 길이
- Identification, IP Flags, Fragement Offset : MTU(Maximum Transmission Unit: 최대 전송 단위)에 따른 패킷 분할 정보
- IP Flags: 패킷 분할 여부를 표시
- D: Do not fragement
- M: More fragement
- MTU 1500 바이트인 이더넷 구간을 1400 바이크 크기의 패킷이 통과하는 경우 ⇒ 패킷 분할이 없음
- 생존 시간(TTL, Time To Live) : 해당 패킷이 통과할 수 있는 라우터의 개수
- 프로토콜 : 상위 계층에 속한 프로토콜 번호 → 수신 측에서 해당 캐핏의 속성을 파악하는데 사용
- 헤더 오류 검사 : 비활성화 상태
- 출발지 IP 주소, 목적지 IP 주소 : 32비트의 IP 주소