'TCP/IP 쉽게 더 쉽게' 라는 책을 중심으로 학습 정리한 포스팅입니다. 잘못된 내용이 있다면 언제든 지적해주시면 감사하겠습니다.🙇🏻♀️
데이터가 프로그램으로 전달되기 위해 거치는 계층.
여러 컴퓨터들로부터 받은 데이터들은 트랜스포트 계층에서 분류된 후에 애플리케이션 계층의 프로그램에 전달되는데 이 때 사용되는 분류 기준이 포트 번호.
트랜스포트 계층의 대표적인 프로토콜은 TCP와 UDP 두 가지.
트랜스포트 계층은 애플리케이션 계층과 인터넷 계층 사이에 위치한다.
인터넷 계층의 역할이 데이터를 수신할 컴퓨터까지 전달하는 것이라면 트랜스포트 계층의 역할은 컴퓨터가 받은 데이터를 애플리케이션까지 전달하는 것
데이터가 정확하게 전달되도록 전송 속도를 조절하거나 도달하지 않은 데이터를 재전송한다.
전송 속도가 중요한 실시간 통신(인터넷 전화나 동영상 스트리밍 서비스 등)에 사용된다.
인터넷 계층에서 전달된 데이터들은 수신지에 대한 포트번호를 갖고 있다
(== 포트번호로 어느 애플리케이션으로 보내져야 하는지 알 수 있다)
포트번호는 0~65535번까지 사용할 수 있다.
Well-known 포트, Registered 포트, Dynamic 포트로 나뉜다. 이 중 Well-known 포트는 애플리케이션 계층에서 많이 사용되는 대표적인 프로토콜의 수신 포트들이다.
주요 well-known 포트는 아래와 같다
클라이언트가 사용하는 포트 번호는 다이나믹 포트에서 자동으로 할당되기 때문에 어떤 번호가 사용될지는 알 수 없다.
서버는 수신 대기를 위해 고정된 포트 번호를 사용 하는데 이 때문에 많은 클라이언트의 요청이 한 포트로 몰릴 수 있다. 이에 반해 클라이언트는 서로 다른 IP 어드레스와 포트번호를 사용한다. 서버는 클라이언트의 IP 어드레스와 포트번호를 조합해 클라이언트를 식별한다.
TCP(Transmission Control Protocol)는 트랜스포트 계층의 프로토콜의 하나.
TCP는 데이터를 세그먼트(segment)라는 단위로 분할하고 전송 속도를 조정하며 데이터가 제대로 전달되지 않았을 때 재전송을 한다.
TCP 세그먼트는 데이터 본체에 TCP 헤더가 붙은 형태로 구성된다.
TCP 헤더는 아래와 같이 구성되어 있다.
(출처: https://www.geeksforgeeks.org/services-and-segment-structure-in-tcp/)
그림에서 Sequence Number는 송신한 바이트 수
Acknowledgement Number는 수신한 바이트 수
Windows Size는 한 번에 수신할 수 있는 데이터 크기
Checksum은 데이터가 훼손되었는지 확인하기 위한 정보이다.
TCP 헤더 중 컨트롤 비트는 현재 통신 상태를 표현하는 플래그 역할을 하는데 통신 상대에게 해당 정보를 전달해서 TCP 통신을 제어하는 용도로 사용한다.
플래그들은 각각 1비트 크기이고 ON/OFF 상태를 나타낸다.
컨트롤 비트는 Reserved와 windows size 사이에 들어가게 되는데 위의 6개 컨트롤 비트에 관한 내용은 아래와 같다
TCP 통신은 커넥션 연결에서 시작되는데 커넥션을 맺는 과정을 3-way handshake라고 한다.
커넥션을 맺을 때 송신-수신 측은 일련번호와 최대 세그먼트 크기(MSS, Maximum Segment Size)를 서로 합의하고 조율한다.
커넥션을 맺는 과정에서 일련번호는 1씩 증가하는데 데이터를 전송할 때는 여기에 전송한 데이터의 바이트 수만큼 더해진다. 데이터를 수신한 후에는 수신한 데이터의 바이트 수만큼 확인 응답 번호에 더한다.
송신 측에서는 일정 시간이 지난 후에도 응답이 오지 않을 경우에 실패로 간주하고 최근에 정상적으로 응답을 받은 후부터 데이터를 재전송한다.
응답을 기다리지 않고 연속된 데이터를 몰아서 보내면 전송 속도를 더 빠르게 향상 시킬 수 있다.
하지만 연속해서 몰아 보내는 데이터 양이 너무 많으면 수신 측에서 제때 처리하지 못할 수 있다. 수신 측은 수신한 데이터를 일시적으로 보관 할 수 있는 버퍼(buffer)라는 저장 영역을 가지고 있다. 수신 측은 TCP 헤더의 윈도우 사이즈에 버퍼의 크기를 설정하고 송신측에 통보해서 어느 정도까지 수신할 수 있는 지를 수시로 알려준다. 이를 흐름제어(flow control)라고 한다.
버퍼가 가득차면 윈도우 사이즈가 0으로 설정되고 데이터 전송을 임시 중지한다. 전송을 재개할 시점을 알기 위해 송신 측은 탐색 패킷 또는 윈도우 프로브(window probe)라고 하는 패킷을 수신 측에 보내고 수신 측의 응답을 받아 윈도우 사이즈를 확인한다.
버퍼에 빈 공간이 있어서 네트워크 경로가 혼잡한 상태라면 통신 속도를 낮춰야 하는 경우가 발생하는데 이 때 인터넷 계층의 헤더 안에 혼잡 플래그가 ON으로 설정되고 송/수신 양쪽이 ECE 플래그와 CWR플래그를 사용해서 통신 속도를 조절하게 된다.
UDP(User Datagram Protocol)는 단순히 데이터를 보내는 역할만 한다.
여기서 Length는 헤더 길이와 데이터 길이의 합계,
Checksum은 데이터가 훼손되었는지 확인하기 위한 정보이다.
브로드캐스트는 여러 컴퓨터와 통신 장비와 정보를 교환 할 때 사용된다.
https://www.geeksforgeeks.org/services-and-segment-structure-in-tcp/
https://www.ques10.com/p/41428/explain-control-bits-flags-in-tcp-header/
https://media.geeksforgeeks.org/wp-content/uploads/UDP-header.png