김영한 님의 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의 크기를 갖습니다.