TCP는 연결지향( Connection Oriented ) 프로토콜로 Segment 가 목적지까지 제대로 전달되었는지 Acknowledgment(보내준 걸 잘 받았다는 응답신호)를 주고 받으므로써 신뢰성있는 전송을 할 수 있으며, Data 를 Segment 별로 쪼개서 송신하고 목적지에서 다시 재조립하는 역할을 합니다.
위의 내용을 좀 더 상세히 설명하면 ( 그림3 )의 TCP Application 인 Telnet 으로 호스트 컴퓨터에 접속을 한다고 하면 제일 먼저 login 이 나오는데, 이렇게 login 이 나오기까지 TCP는 3-Way Handshaking 이라는 방법으로 연결설정을 합니다.
사용자 삽입 이미지
( 그림 4 ) TCP Connection Sequence
야구에서 투수가 포수에게 공을 던질 때 아무런 신호없이 바로 던지지 않고 서로간에 사인을 교환한 후 공을 던지듯이, TCP 에서의 데이터 교환도 투수와 포수간에 사인에 해당하는 연결 설정을 하고 난 뒤 데이터를 보내게 됩니다. 이러한 과정이 위의 그림처럼 3번 악수하는 것 같다고 해서 3-Way Handshaking 이라고 합니다.
( 그림4 )의 과정을 쉽게 표현하자면 PC에서 Host Computer 에 "준비됐나?" 하고 물어보면 Host Computer 에서 "준비됐다!" 라고 답하고 다시 PC에서 "알았다." 라고 응답하므로써 데이터를 보내기 위한 연결설정이 완료되는 것입니다.
처음 PC에서 무작위로 순서번호( Sequence Number ) 100을 선택하여 Host Computer 에 SYN 패킷을 보내면 Host Computer 에서는 100 에 1을 더한 101번의 수신확인 응답 (Acknowledgment)과 함께 자기의 임의의 초기 순서번호 200을 패킷에 담아 PC에 보냅니다. 그러면 PC는 SYN 패킷을 받아 200 에 1을 더한 201번의 수신확인( ACK ) 패킷을 보내므로써 연결설정이 끝나고 PC 화면에 login 프롬프트가 나타나는 것입니다.
이제는 연결설정이 끝났으므로 PC와 Host Computer 간에 데이터를 주고 받게 되는데 그 과정은 아래와 같습니다.
사용자 삽입 이미지
Source : Source Port No Dest : Destination Port No
Seq : Sequence Ack : Acknowledgment
( 그림 5 ) TCP Sequence & Acknowledgment
제일 먼저 PC에서 Seq =102 인 패킷을 보내면 Host Computer 에서 Seq =102 인 패킷을 잘 받았으니 그 다음 것을 보내라는 뜻의 Ack =103 ( 102+1 ) 인 패킷을 전송하고 PC에서도 역시 Seq =201 인 패킷을 잘 받았으니 그 다음 것을 보내라는 뜻의 Ack =202 ( 201+1 )인 패킷을 보냅니다.
이런 식으로 계속해서 데이터를 주고 받으므로 TCP Protocol 을 연결지향 Protocol ( Connection Oriented Protocol )이라고 하고 신뢰성 있는 전송이 가능한 것입니다.
그리고 TCP 는 Data를 쪼개서( Segment ) 전송하고 수신측에서는 재조립하는 역할을 하는데 Seq 의 순서대로 조립을 합니다. TCP Segment Format 은 다음과 같습니다.
사용자 삽입 이미지
※ 괄호 안은 비트수를 나타냄. 20Byte = 32bit*5, 24Byte = 32bit*6
사용자 삽입 이미지
( 그림 6 ) TCP Segment Format
※추가내용
필드명
비트수
내용
SRC PORT
16
송신쪽 포트 번호를 나타낸다
DEST PORT
16
목적지 포트 번호를 나타낸다.
SEQ (Sequence
Number)
32
송신쪽이 보내려 하는 데이터 스트림의 단위를 나타내는 순서 번호이다.
ACK(Acknowledgement number)
32
다음번에 자신이 수신할 때 상대방이 보내야 할 송신용 순서 번호를 가지고 있다.
HLEN (Header Length)
4
TCP 헤더의 길이를 나타낸다
RESERVED
6
나중에 확장을 위해 준비해둔 필드이다.
CODE BIT
6
Contrl flag 또는 제어 비트라고 하며 6가지의 제어값을 가지며1이 지정되면 다음과 같은 의미를 가진다. 왼쪽에서 부터의 필드값을 살펴보면,
URG (Urgent Flag)
긴급하게 처리해야 하는 데이터가 들어 있다는 뜻
ACK (Acknowledgement
Flag)
응답확인 번호를 사용한다
PSH (Push Flag)
TCP 가 받은 데이터를 바로 윗층 어플리케이션에게 보낸다.
RST (Reset Flag)
어떤 원인인지 재전송을 해도 통신이 회복되지 않는 경우 일방적으로TCP의 가상회선을 끊는 것을 의미한다.
SYN (Synchronize
Flag)
가상회로를 확립할 때 사용한다. 순서 번호를 이 TCP헤더에 나타난 송신용 순서 번호로 초기화 한다.
FIN (Fin Flag)
송신쪽이 보낸 데이터가 종료 되었다는 것을 나타낸다. 그러나 수신은 계속 가능한 상태이다. 정상종료인 경우 끊기를 요청하는 쪽이 먼저 FIN을 지정한 TCP로 종료 요청을 통지한다. 받은 쪽에서는 종료 처리를 하고 FIN을 지정한 TCP헤더를 되돌려주어서 모든 처리를 종료 시킨다.
WINDOW
16
ACK에 나타난 SEQ번호에서부터 어는 정도의 데이터를 수신할 수 있는지를 알려준다
CHECKSUM
16
송신쪽은TCP허위 헤드를 만들어 첵섬을 계산해서 이 필드에 넣어 전송하며, 수신측에서는 다시 같은 형태의 허위헤드를 만들어 책셈을 계산한뒤 제대로 데이터가 수신되었는 확인한다.
URGENT POINTER
16
김급 처리해야 하는 데이터가 들어 있는 데이터를 가리키는 포인로 취급된다. TCP헤드 뒤에 추가된 데이터의 앞부분(송신용 순서 번호를 나나태는 장고)으로부터 이 긴급포인터에 나타나 수치 만큼의 바이트가 데이테로 처리된다.
OPTION
유동
통신의 세부 사항을 조정하기 위해 사용된다. 일반적으로 거의 사용하지 않으며 전체길이가 32비트의 배수가 되도록 지정해야 한다.
DATA
유동
실제 데이터
 
위의 TCP Segment Format에서 Source Port 와 Destination Port 에 대해 부연 설명을 하자면 TCP는 상위 Application Layer 와 Port 번호를 가지고 Interface 하는데 Source Port 는 송신측 Application Layer 의 Protocol 과 Interface 할 때 쓰이는 Port 번호이고 Destination Port 는 수신측 Application Layer 의 Protocol 과 Interface 할 때 쓰이는 Port 번호입니다.
위의 ( 그림 3 )의 둥근 원안의 숫자가 바로 TCP 와 Application Layer 간의 Port 번호입니다. Source Port 번호는 Application Layer에서 임으로 생성해서 사용하는데 1024 이상의 것을 사용해야 됩니다. 0 ~ 1024 는 Well-Known Port 번호라고 해서 우리가 잘 알고 있는 Application Layer Protocol 에 Port 번호가 지정되어 있고( 아래 표 참조 ), 1024 까지 예약 되어 있습니다. 1024 이상은 어느 때고 임으로 사용할 수 있는 Port 번호입니다. Destination Port 번호는 각 프로토콜에 지정되어 있는 Port 번호를 이용하는데 Telnet 23번, FTP 21번, DNS 53번 등입니다.
Well-Known Port 번호
사용자 삽입 이미지

앞 페이지 ( 그림 5 )와 밑의 ( 그림 7 )에서 PC의 TCP 패킷 Source No = 1028, Dest No = 23 인 것도 송신측 Port 번호는 1024 이상은 어느 것이나 임의적으로 사용할 수 있으므로 1028 Port 번호를 사용했고, 수신측 Port 번호는 Telnet 으로 접속했으므로 지정된 23 Port 번호를 표시해서 패킷을 Host Computer 에 전달한 것입니다.
사용자 삽입 이미지
사용자 삽입 이미지
( 그림 7 ) Application Protocol 에 따른 Port 번호
UDP ( User Datagram Protocol )는 TCP 와는 달리 비연결지향 프로토콜 ( Connectionless Protocol )로 Segment를 보내기만 하고 응답( Acknowledgment )을 주고 받지 않기 때문에
제대로 전달되었는지 확인하지 않는 특성을 가지고 있습니다.
사용자 삽입 이미지
( 그림 8 ) TCP & UDP
위의 그림에서처럼 UDP 는 TCP 와 같은 양방향 프로토콜이 아닌 단방향 프로토콜로, 투수와 포수간에 사인도 없이( 연결설정 없이, 커넥션 확립없이 ) 공을 던지고 공이 잘 들어 갔는지 확인도 안하는 것과 같습니다. UDP 는 이러한 과정으로 데이터를 보내므로 비연결지향 프로토콜( Connectionless Protocol )이라고 하는 것입니다.
TCP와 같은 연결지향 프로토콜은 접속을 계속 유지한 상태에서 데이터를 주고 받고, UDP같은 비연결지향 프로토콜은 접속을 계속 유지하지 못하고 단발성에 그칩니다. 아래 UDP Segment Format을 보면 TCP Segment Format 에 있는 Sequence Number 와 Acknowledgment Number 가 없고 단순한 형태임을 알 수 있습니다.
사용자 삽입 이미지
※ 괄호 안은 비트수를 나타냄. 8Byte = 32bit*2
( 그림 9 ) UDP Segment Format
UDP 가 사용되는 예를 들자면 인터넷 사이트에 접속하기 위해 www.leeic.com 인 주소를 입력하면 도메인 이름에 해당하는 IP Address를 알아내기 위해 제일 먼저 DNS 서버에 접속합니다. 이때는 UDP Protocol을 이용해 UDP 패킷을 DNS 서버에 보내 IP Address를 알려 달라고 요청합니다.
그러면 DNS 서버에서는 www.leeic.com에 해당하는 IP Address를 UDP 패킷으로 요청자에게 보내 IP Address 를 알려줍니다.
사용자 삽입 이미지
( 그림 10 ) UDP Protocol 과 DNS
- TCP 와 UDP Protocol 의 차이점
사용자 삽입 이미지
TCP는 신뢰성 높은 데이터 통신 서비스를 제공하는 반면 그것의 제어에 부하가 걸려 통신속도가 UDP 보다 느리고, 통신 소프트가 데이터 전송에 관한 세밀한 제어를 할 수 없다는 결점도 있습니다.
UDP는 고속통신이 가능하고 통신 소프트가 신뢰성 있고 효율적인 제어를 세밀하게 행할 수 있지만, 통신 소프트의 작성이 대단히 복잡합니다.
따라서 신뢰성 있는 연속된 데이터 통신을 필요로 하는 통신 소프트에는 TCP가 사용되고, 교환하는 데이터가 통신 하드웨어의 1패킷정도로 해결되거나 즉시성이 요구되며, 데이터 분실에 의해 통신 소프트가 작동되지 않아도 시스템 운영에 커다란 문제가 되지 않는 경우에는 UDP를 사용합니다.

Posted by 영웅기삼
,