Search

전송 계층

생성일
2023/07/26 04:07
태그

전송 계층

오류 검출 및 복구, 흐름제어와 중복검사 등을 수행하여 송신자와 수신자 간에 신뢰성있고 효율적인 데이터 전송을 도와주는 역할을 맡는다.
TCP와 UDP 프로토콜이 있고, Port 번호를 통해 올바른 어플리케이션에 데이터가 전송될 수 있도록 한다.

연결형 통신과 비연결형 통신

전송 계층의 특징은 신뢰성/정확성효율성으로 구분할 수 있다.
연결형 통신은 데이터를 목적지에 신뢰할 수 있고 정확하게 데이터를 전달하는 방법으로, 통신 대상과 서로 확인해가며 통신하는 방식이다. TCP가 연결형 통신이다.
비연결형 통신은 데이터를 효율적이고 빠르게 전달하는 방법으로, 통신 대상과 확인 없이 일방적으로 데이터를 전송하는 방식이다. UDP가 비연결형 통신이다.

TCP

TCP(Transmission Control Protocol)는 IP 규칙에 더해 패킷의 순서, 패킷의 유실 여부, 오류 검출을 해서, 패킷 전송을 제어하고 신뢰성 있는 전송을 보장해주는 연결형 통신의 프로토콜이다.
TCP 프로토콜을 적용 시 전송 계층에서 캡슐화 할 때, 이와 같은 TCP 헤더를 붙여서 세그먼트를 만든다.
TCP 헤더의 코드 비트 필드에는 위와 같이 여러 플래그들이 들어있는데, 이를 이용해 통신 시작 시에 3-way handshake와 종료 시에 4-way handshake를 수행한다.
3-way handshake
4-way handshake
TCP 헤더의 일련번호 필드는 송신측에서 데이터를 송신할 때 해당 세그먼트가 전체 데이터 중 몇 번째인지를 알려주는 필드이다.
수신에 대한 응답을 보낼 때는 확인 응답 번호 필드에 몇 번째 데이터를 받았는지 나타내, 송신측에 데이터가 몇 번째까지 도착했는지 알려준다.
일련번호와 확인 응답 번호 필드들을 통해 데이터가 손상되거나 유실된 경우 데이터를 재전송하는데, 이를 재전송 제어라 한다.
윈도우 크기 필드는 얼마나 많은 용량의 데이터를 저장해 둘 수 있는지를 나타낸다. 매 세그먼트마다 확인 응답을 보내게 되면 비효율적이기 때문에 수신측에 버퍼를 두어 데이터를 한번에 처리하는데, 해당 버퍼에서 오버플로우가 발생하지 않도록 버퍼의 한계 크기를 윈도우 크기 필드에 담아 보낸다. 반대로 수신측 버퍼가 작은 경우 전송 데이터를 줄여서 오버플로우를 방지한다.
TCP 헤더에는 출발지 포트번호와 목적지 포트번호가 있어, 이를 통해 전송된 데이터가 어떤 어플리케이션을 목적지로하는지 구분할 수 있다.
포트 번호로는 0 ~ 66535번을 사용하는데, 0 ~ 1023번 포트는 주요 프로토콜에 사용이 예약되어있고 이를 well-known 포트라고 한다. 1024번 포트는 예약되어 있지만 사용되지 않고, 1025번 포트부터 사용된다.
서버에서는 포트 번호를 지정해 사용해야하지만, 클라이언트 측에서는 임의의 포트가 자동으로 할당된다.
추가적으로 TCP에서는 네트워크가 불안정하여 통신이 잘 안되면 제어를 통해 재전송하는데, 재전송이 반복되면 네트워크가 붕괴될 수 있다. 따라서 네트워크가 혼잡하다고 감지되면 송신 측의 전송 데이터의 크기를 조절하여 전송량을 조절하는데 이를 혼잡 제어라 한다.

UDP

UDP(User Datagram Protocol)는 각각의 패킷 간에 순서가 존재하지 않는 독립적인 데이터그램 방식으로 통신하는 비연결형 통신 방식의 프로토콜이다.
TCP와는 달리 통신 시에 handshake 과정같은 연결 설정이 없고, 중간 경로를 어디를 타든 신경쓰지 않으며, 패킷의 순서 보장도 없기 때문에 훨씬 빠르게 통신할 수 있다.
UDP 프로토콜을 적용 시 전송 계층에서 캡슐화 할 때, 이와 같은 UDP 헤더를 붙여서 데이터그램을 만든다.
UDP는 3-way Handshake가 없기 때문에 LAN에 연결된 불특정 다수의 장치들에 데이터를 보내는 브로드캐스트를 할 수 있다.