TCP / UDP
TCP (Transmission Control Protocol, 전송 제어 프로토콜)
TCP는 TCP/IP 프로토콜 슈트의 핵심 전송 계층 프로토콜입니다.
TCP는 연결형이고, 승인을 제공하며, 신뢰할 수 있는 다양한 기능을 갖춘 프로토콜로 안정적이지 않은 인터넷 프로토 콜(IP) 위에서 어플리케이션이 안정적으로 데이터를 송신하는 방법을 제공합니다.
TCP는 어 플리케이션이 데이터를 바이트 스트림으로 보낼수 있도록 하며 그 바이트 스트림을 적절한 크기의 세그먼트로 자동 패키징합니다.
그리고 TCP의 복수 슬라이딩 윈도우 체계는 수신자 가 모든 데이터를 수신하고, 필요할 경우 재전송을 하며, 상대방의 송신 속도를 조절할 수 있는 흐름제어 기능을 제공합니다.
* 3-way handshake
3-way handshake 에 대해 설명하겠습니다.
1) 송신 측은 CLOSED 상태에서 수신 측과의 통신을 원하고 있음을 알리는 신호로 TCP 헤더의 SYN Flag를 활성화하고 패킷에 SYN=J 값으로 상대방에게 알려주며, SYN_SENT 상태가 됩니다.
2) 수신 측은 송신 측의 SYN_Flag 신호에 대한 응답 패킷 생성에 들어가기 위해, ACK Flag 를 on 시키고, 송신 측 일련번호에 1을 더한 응답, ACK=J+1, SYN=K를 더해 발송하고 SYN_RECEIVED 상태로 전환됩니다.
3) 송신 측은 두 번째 패킷을 받고 ACK=K+1을 전달하면서 ESTABLISHED 상태가 되며, 이 때부터 양 방향 패킷 교환이 시작됩니다.
* 4-way handshake
다음 4-way handshake 에 대해 설명하겠습니다.
1) 먼저 통신을 종료하고자 하는 클라이언트는 서버에게 FIN Flag를 세팅한 패킷을 보내고 자신은 FIN_WAIT_1 상태가 됩니다.
2) FIN을 수신한 서버는 ACK를 클라이언트에게 전송하고 소켓의 상태를 CLOSE_WAIT로 변 경합니다.
3) ACK를 수신한 클라이언트 서버가 FIN을 잘 받았다고 판단하고 FIN_WAIT_2로 소켓의 상 태를 변경한 뒤 다시 FIN 패킷을 기다립니다.
4) FIN을 클라이언트에게 전송한 서버는 다시 FIN 패킷을 클라이언트로 전송한 뒤 소켓을 LASK_ACK 상태로 변경합니다.
5) FIN을 수신한 클라이언트는 서버에게 ACK를 전송한 뒤 소켓의 상태를 TIME_WAIT 상태 로 변경합니다.
6) 클라이언트로부터 마지막 ACK를 수신한 서버는 소켓을 CLOSED 합니다.
UDP (User Datagram Protocol)
UDP를 하나의 단어로 설명한다면 단순함입니다.
UDP의 유일한 임무는 상위 계층 프로토콜에서 온 데이터를 UDP 메시지에 캡슐화하여 IP 계층으로 전달하는 것입니다.
* UDP를 이용한 기본 전송 단계 상위 계층 데이터 전송 : 어플리케이션이 메시지를 UDP 소프트웨어로 송신
UDP 메시지 캡슐화 : 상위 계층 메시지는 UDP 메시지의 데이터 필드로 캡슐화됩니다.
그리고 UDP 메시지의 헤더가 채워지는데 이 때 UDP로 데이터를 송신한 어플리케이션의 출발지 포트 필드와 수신자의 목적지 포트도 채워집니다.
그리고 체크섬 값도 계산될 수 있습니다.
메시지를 IP로 전달함 : UDP 메시지가 전송을 위해 IP로 전달됩니다.
프로토콜이 TCP 대신 UDP를 사용하는 경우는 두 가지입니다.
첫 번째 경우는 어플리케이션 이 신뢰성 있는 전달보다는 적시 전달에 더 높은 가치를 부여하고, TCP의 손실 데이터의 재 전송이 가치가 없는 경우입니다.
두 번째 경우는 단순한 프로토콜이 어플리케이션 계층에서 IP 데이터그램 자체의 잠재적인 손실 문제를 처리할 수 있고, TCP의 기타 기능을 필요로 하지 않는 경우입니다.
그리고 멀티캐스트 or 브로드캐스트 전송을 필요로 하는 어플리케이션도 UDP를 사용합니다.
* TCP와 UDP가 많이 사용하는 포트번호
* TCP와 UDP의 차이점
'network 이론 > basic network' 카테고리의 다른 글
Collision Domain 및 Broadcast Domain (0) | 2016.09.06 |
---|---|
TCP/IP model (0) | 2016.09.06 |
OSI 7 Layer (0) | 2016.09.01 |
NAT ( Network Address Translation ) (0) | 2016.08.31 |
DNS(Domain name System) (0) | 2016.08.31 |