김영한 님의 inflearn 강의
모든 개발자를 위한 HTTP 웹 기본 지식
강의를 듣고 공부한 내용을 정리한 글입니다.
패킷(Packet)
단위로 정보가 이루어지고 송수신 됩니다.IP Address
와 목적지 IP Address
, 그리고 전송하고자 하는 메시지
가 포함됩니다.비연결성 : 패킷을 받을 대상이 없거나 서비스할 수 없는 상황에서도 패킷을 전송할 수 있습니다. 패킷을 받는 대상이 수신 가능한 상태인지 알 방법이 없습니다.
비신뢰성 : 패킷을 전송하지만 네트워크 상에서 패킷이 유실될 수도 있고, 라우팅 상황에 따라 나누어 보낸 패킷이 순서대로 도달하지 않을 수도 있습니다. 이 경우 패킷이 잘 도달하였는지, 유실되었는지 알 방법이 없습니다.
프로그램 구분 : 패킷이 순서대로 잘 도착했다고 하더라도, 서버에서 여러 애플리케이션이 구동되고 있는 경우, 어떤 패킷이 어떤 애플리케이션을 위한 것인지 확인할 수 있는 방법이 없습니다.
Source Port(출발지 포트 번호)
와 Destination Port(도착지 포트 번호)
를 갖고 있습니다.Well-Known Port
로 사용되는 경우가 많은 포트 번호이므로 사용하는 것을 지양합니다.IP만 사용할 때 발생하는 문제들을 해결해 줄 수 있습니다.
TCP 패킷의 헤더에는 다음 정보들이 포함됩니다.
Source Port
: 송신할 때 사용한 포트 번호입니다. 16bits
를 할당받습니다.
Destination Port
: 수신하는 포트 번호입니다. 16bits
를 할당받습니다.
Sequence Number
: 전송하는 데이터의 순서를 지정하며 32bits
를 할당받습니다. 보낼 데이터 1byte당 1씩 증가시킵니다.
Acknowledgement Number
: 수신자가 예상하는 다음 시퀀스 번호를 의미하며 32bits
를 할당받습니다. 다음에 받고자 하는 데이터의 시작점을 의미한다고 볼 수 있죠.
Data offset
: TCP 헤더 크기를 갖는 4bits
공간입니다. 뒤의 Options에 따라 TCP 헤더의 크기가 달라질 수 있는데, 어디까지가 헤더인지 알아야 헤더와 메시지를 구분할 수 있습니다. 그럴 때 Data Offset
을 참조하면 되겠죠.
Reserved
: 3bits
할당된 공간으로 미래에 설정할 수 있도록 예약해둔 비트입니다. 기본적으로 0으로 설정해야 합니다.
Bit Flags
: 그 뒤로는 1비트씩 9개의 Bit Flags
들이 따릅니다.
URG
: Urgent
필드에 값이 채워져 있음을 알리는 Flag 입니다.
ACK
: Acknowledgement
필드에 값이 있음을 알립니다. 0으로 설정되는 경우에는 값이 무시되어버립니다.
PSH
: 이 데이터를 빠르게 애플리케이션에게 전달해 달라는 Flag입니다. 1이라면 이후 더 연결된 세그먼트가 없음을 의미하기도 합니다.
RST
: 연결 상태인 연결을 강제로 reset 해달라는 요청을 보낼 때 사용합니다.
SYN
: Sequence Number
의 동기화를 위한 요청이라는 것을 의미합니다.
FIN
: 연결을 종료하는 요청을 의미합니다.
그리고 이후 Reserved
필드를 이용하여 3개의 Bit Flags
들인 NS
, CWR
, ECE
가 추가되었습니다. 위 3개의 필드들은 네트워크의 명시적 혼잡통보
를 위해 사용됩니다.
Window Size
: 한번에 전송 가능한 최대 데이터의 양을 의미하며 16bits
를 할당합니다.Checksum
: 데이터 송신 중 오류를 검출하기 위한 필드로 16bits
할당됩니다.Urgent Pointer
: 긴급하게 처리해야 하는 데이터를 가리키고 있는 포인터로16bits
할당됩니다.Options
: TCP
의 기능을 확장할 때 쓰이며, 길이는 가변적입니다.TCP로 통신하는 경우, 메시지가 송수신되기 전 다음 과정을 거칩니다.
- SYN : 상대에게 통신의사를 밝히고 통신을 요청하는 메시지를 송신합니다.
- ACK+SYN : 상대방 측에서 메시지에 대해 통신 가능하다는 응답을 보내고, 또 통신 의사를 밝히고 통신을 요청하는 메시지를 함께 보냅니다.
- ACK : 2에서 보낸
SYN
에 대한 응답을 보냅니다.
실제로 송신 노드와 수신 노드가 물리적으로 연결되어 있는 것은 아니지만, 위 과정을 통해 개념적으로 연결성을 보장받을 수 있습니다.
Flow Control
이라고 합니다.Stop and Wait
매번 전송한 데이터에 대해 ACK를 받아야 다음 데이터를 전송할 수 있는 방식을 말합니다.
Sliding Window
송신 측에서 ACK 없이 동적으로 흐름제어 할 수 있도록 하는 기법입니다.
UDP는 연결지향형
인 TCP
와 다르게, 비연결지향형
프로토콜입니다. 별도로 Three Way Handshaking 같은 연결 절차를 거치지 않고 패킷을 전송할 수 있습니다. IP
에 PORT
가 추가된 정도로 생각해도 됩니다.
TCP Header
에 비해 아주 단순한 구조를 가지고 있습니다.
Source Port
, Destination Port
: TCP
와 동일합니다 각각 16bits
의 크기를 갖습니다.Length
: 헤더와 데이터를 합한 전체 패킷의 길이를 담습니다. 16 bits
크기를 갖습니다.Checksum
: TCP
와 동일하며 16bits
의 크기를 갖습니다.