전송 계층 - TCP, UDP 프로토콜
오늘은 네트워크 7 계층 중 전송(Transport) 계층에 대해서 설명을 해보려고 합니다.
전송 계층
전송 계층은 네트워크 구성요소와 프로토콜 내에서 송신자와 수신자를 연결하는 통신 서비스를 제공한다. (wikipedia - 전송 계층의 정의)
쉽게 말하자면 전송 계층은 데이터를 목적지에 보내거나 목적지에 도달을 하는 데 신뢰 정보를 확인하는 계층입니다. 목적지까지 가려고 하는 데이터의 전송 과정 중에 발생할 수 있는 다양한 오류(데이터 손실, 유실 등등)를 처리하는 곳이라고 생각하시면 편합니다.
또한 전송된 목적지가 어떤 응용프로그램인지 판별해주는 기능을 한답니다.
쉽게 예를 들면 우리가 누군가에게 메일을 보낸다고 했을 때 메일 전송 프로그램을 통해서 전송이 되어야 하는데 다른 타 프로그램으로 전송되면 안 되잖아요? 이런 다양한 기능들을 하는 계층이랍니다.
<연결 방식 종류>
연결형 통신 : 정확하게 데이터를 보내기 위한 통신 - TCP
비연결형 통신 : 효율적으로 빠르게 데이터를 보내기 위한 통신 - UDP
TCP (Transmission Control Protocol)
전송 제어 프로토콜. CP는 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟(8bit)을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다.
일반적인 웹서버나 파일전송 등 IP와 함께 중요한 프로토콜 중에 하나이다.
데이터에 TCP헤더가 붙은 것을 세그먼트(segment)라고 한다.
TCP 헤더에는
1. 출발 포트 번호 2. 목적 포트 번호 3. 일렬번호 4. 확인 응답 번호 5. 헤더 길이 6. 예약 영역 7. 코드 비트 8. 윈도우 크기 9. 체크섬
10. 긴급 포인터 11. 옵션 이 들어있다.
1. 출발 포트 번호와 2. 목적 포트 번호는 어떤 응용 프로그램으로 통신을 할지 정하는 역할을 한다.
SSH (22) , SMTP(25), DNS(53), HTTP(80), POP3(110), HTTPS(443)
3. 일련 번호 는 데이터의 순서를 알 수 있도록 해주는 기능을 한다. 이로써 데이터가 몇 번째 데이터인가를 알 수 있다. 4. 확인 응답 번호는 수신 측에서 몇번째 데이터를 수신했는지 송신 컴퓨터에 알려주는 기능을 한다. 확인 응답 번호를 가지고 다음 데이터의 번호를 알 수 있도록 다시 수신 컴퓨터에 알려주는 역할도 한다. 일련번호와 확인 응답 번호를 가지고 데이터 전송에 오류가 생긴다면 재전송을 할 수 있도록 해 줌으로써 신뢰성을 높입니다.
TCP 통신은 연결형 통신이기 때문에 가상의 독점 통신로를 확보해야 한다.
헤더의 7. 코드 비트를 통해서 알 수 있다.
6bit로 구성된 코드 비트는
URG(Urgent pointer 필드의 값이 유효함) , ACK(확인 응답) , PSH(푸시 기능) , RST(커넥션 리셋) , SYN(연결 요청) , FIN(연결 종료)이라는 상태를 나타내는 비트를 가지고 있다.
여기에 비트를 가지고 상태를 확인하면서 연결에 대한 오류를 처리한다.
이렇게 TCP 프로토콜은 연결의 신뢰성과 정확성을 중요하게 여긴다고 말할 수 있다.
< 3 - Way - Handshake >
1. 먼저 수신측 컴퓨터에 연결 요청을 보낸다 (SYN = 1)
2. 수신 측 컴퓨터에서 송신 측 컴퓨터에게 OK 사인을 보낸다.(ACK = 1, SYN = 1)
3. 송신측 컴퓨터에서 수신 측 컴퓨터에게 연결한다는 최종 확인을 한다.(ACK = 1)
8. 윈도우 크기란 해당 세그먼트를 보내려는 컴퓨터의 윈도우 비트 크기를 나타낸다. (수신 측) 효율을 높이기 위해서 대량의 세그먼트를 한 번에 보내는 경우 세그먼트를 담아둘 버퍼에 오버플로우가 발생하지 않도록 버퍼의 크기를 알고 있어야 합니다. 이를 윈도우 크기를 가지고 알 수 있어요. (3-Way-Handshake하는 동안에도 서로 계속 확인한 것)
9. 체크섬 비트는 헤더 및 데이터의 에러 확인을 위해 사용한다. 16bit로 나타낸다.
UDP (User Datagram Protocol)
유저 데이터그램 프로토콜. TCP 프로토콜은 3-Way-Handshake 방식을 가지고 신중하게 데이터를 전송했던 것에 비해서 UDP는 비연결통신이기 때문에 속도가 빠르고 위에 방식을 하지 않습니다. 이로써 효율을 중요시한다고 알 수 있습니다.
데이터를 빠르게 보내기 위해서 영상처리를 위해 제공이 많이 되고 있다고 합니다. 또한 온라인 게임에서도 쓰이고 있는데요 예전 스타크래프트도 UDP 프로토콜을 사용했었습니다.
UDP 헤더는 TCP 헤더와는 다르게 4가지로만 이루어져 굉장히 짧은 모습입니다. 포트 번호들과 체크섬, 길이만 담고 있습니다.