TCP/IP가 보이는 그림책이라는 책을 통해서 정리한 내용
트랜스포트층의 역할
-애플리케이션층과 네트워크층의 중개 역할을 한다.
-데이터가 항상 확실히 전달된다고는 할 수 없으므로 문제가 발생한 경우에는 뭔가 대체 방안이 필요하다. 이 때 통신 서비스에 맞는 방법으로 그것을 처리하는 것이 트랜스포트층의 역할이다. ( = 데이터가 왔는지 안 왔는지 또는 데이터의 손상 여부를 판단하여 재전송을 요구한다.)
트랜스포트층에는 2가지의 프로토콜이 있다. 위의 사진처럼 하나는 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)라는 두 개의 프로토콜이 있다.
TCP는 신뢰성을, UDP는 빠른 속도를 중요시 한다.
TCP는 송신하는 데이터를 확실히 상대에게 전달하고 싶을 때 사용하고 TCP를 이용한 서비스로는 WWW, 전자메일 등이 있다.
UDP는 송신하는 패킷이 작을 때나 데이터를 재전송할 필요가 없을 때 사용하고 UDP를 이용한 서비스로는 IP전화, 스트리밍 등이 있다.
애플리케이션의 현관 ( = 포트)
애플리케이션층에는 애플리케이션 프로토콜마다 데이터의 출입구가 마련되어 있다. 이 출입구를 포트(port)라고 하며, 각 포트에는 포트 번호가 붙어 있다. 통신을 수행할 때는 포트 번호를 사용하여 보낼 곳을 지정한다.
※ 수신측에서는 TCP 헤더에 적혀 있는 포트 번호를 보고, 받아서 건네줄 애플리케이션 프로토콜을 판단한다.
포트 번호는 0~65535번까지 있다. 그 중에서 0~1023번까지는 통신 서비스마다 미리 예약되어 있으며, 잘 알려진 포트 번호(well-known port number)라고 한다. 그 외 포트 번호는 사용자가 임의로 설정할 수 있지만 이때 통신하는 컴퓨터간에 어떤 포트 번호를 사용할지에 대한 약속이 통일되어야 한다.
(※ 포트 번호에 대한 자세한 설명 : https://ko.wikipedia.org/wiki/TCP/UDP%EC%9D%98_%ED%8F%AC%ED%8A%B8_%EB%AA%A9%EB%A1%9D)
TCP 프로토콜
TCP는 데이터를 확실히 전달하기 위해 수신측과 일 대 일로 통신한다. 이런 통신을 커넥션형 통신이라고 한다.
1. 수신측이 데이터를 받을 수 있는 상태인지를 확인한 후 통신을 개시한다. (이것을 통신을 연결한다-라고 한다.)
2. 데이터를 정해진 크기로 분할하고, TCP 헤더를 붙여서 순서대로 송신하다.
3. 데이터를 다 보냈으면 통신을 종료한다.
수신측은 전해 받은 데이터를 원래 형태로 다시 맞춘 후 애플리케이션층에 전달한다.
1. TCP 헤터의 정보를 보고 데이터를 순서대로 맞춘다.
(※ 데이터의 순서를 가리키는 번호 외에 포트 번호나 데이터가 무사한지를 확인하기 위한 값 등이 적혀 있다.)
2. TCP 헤더를 가지고 데이터를 다시 맞춘다.
3. 애플리케이션층의 프로토콜에 전달한다.
확실히 전달하기
통신 상대에게 통신 상태를 전하는 수단으로 사용되는 것이 TCP 헤더에 있는 6비트의 컨트롤 플래그(control flag)이다. 상대에게 전하고 싶은 항목은 1, 그 이외는 0으로 만든다.
URG(Urgent) : 1이면 세그먼트가 긴급한 데이터를 갖고 있다.
ACK(Acknowledgment) : 1이면 통신 확인에 대해 알았다고 응답한 것이다.
PSH(Push) : 1이면 세그먼트를 바로 애플리케이션층에 전달한다.
RST(Reset) : 1이면 통신을 강제적으로 해제한다.
SYN(Synchronize) : 1이면 통신 개시를 요청한다.
FIN(Fin) : 1이면 통신 종료를 요청한다.
통신 세계에서 일반적으로 상대와 서로 확인해 가면서 주고받는 것을 핸드셰이크(handshake)라고 한다. TCP에서는 통신을 개시할 때 다음과 같이 주고받는데, 이것을 3-way 핸드셰이크라고 한다.
※ 통신을 시작하기 전에 송신측과 수신측이 다룰 수 있는 데이터가 각각 다를 수 있으므로 데이터량을 확인한다. 그리고 다룰 수 있는 데이터가 작은 쪽을 맞춰서 통신을 한다.
- 통신을 해제할 때도 TCP 헤더의 컨트롤 플래그를 사용하여 알려준다.
TCP 헤더에는 데이터의 순서를 나타내는 번호(시퀀스 번호)가 있다. 헤더를 확실히 받기 위해서 이 번호를 사용하여 다음과 같은 주고받기를 수행할 수 있다.
1. 송신측 : TCP헤더에 시퀀스 번호를 쓰고, 세그먼트를 보낸다.
2. 수신측 : 시퀀스 번호를 보고 순서대로 전달되고 있는 지를 확인하고, 전달된 세그먼트의 다음 번호를 송신측에게 알려준다.
3. 송신측 : 무사히 전달되었다는 것을 확인하고, 다음 세그먼트를 보낸다.
4. 수신측 : 다음 세그먼트를 받고, 시퀀스 번호를 보고 순서대로 나열한다.
※ 통신을 시작할 때 정한 윈도 사이즈까지라면 확인 응답을 기다리지 않고 모아서 보낼 수 있으며 윈도 사이즈는 통신 도중에 변경할 수 있다.
문제 발생 시의 처리
1. 세그먼트의 지연 및 분실
2. 확인 응답의 지연 및 분실
(※ 세그먼트가 중복되면 하나를 남기고 파기한다.)
3. 데이터 파손
( ※ 깨졌는지 안 깨졌는지에 대한 판단은 헤더에 있는 체크섬(checksum)이라는 값을 사용하여 판단)
※ 일정 횟수 이상을 재전송해도 확인 응답이 오지 않는 경우, 송신측이 강제적으로 통신을 해제한다.
TCP 헤더에 관한 자세한 정보
UDP 프로토콜
UDP에서는 여러 상대에게 동시에 데이터를 보낼 수 있다. 복수의 특정인에게 보내는 것을 멀티캐스트(multicast), 불특정 다수에게 보내는 것을 브로드캐스트(broadcast)라고 한다.
UDP 헤더에 관한 자세한 정보
( 1 - http://www.joinc.co.kr/w/Site/TCP_IP/IntroUDP
2 - http://darksoulstory.tistory.com/61 )
오타가 많이 있을 수도 있고 잘못된 정보가 있을 수 있으므로 날카로운 지적을 해주신다면 달게 받겠습니다.
'TCP.IP' 카테고리의 다른 글
제 6장 데이터 링크층과 물리층 (0) | 2017.01.03 |
---|---|
제 5장 네트워크층 (0) | 2017.01.02 |
제 3장 애플리케이션층 (0) | 2016.12.30 |
제 2장 통신 서비스와 프로토콜 (0) | 2016.12.27 |
제 1장 TCP/IP 개요 (0) | 2016.12.27 |