본문 바로가기

OSI 7계층/[LAYER 4] 전송 계층

TCP[Transmission Control Protocol]의 세계

안녕하세요! 오늘은 아침부터 비가 주륵주륵 내리는 날입니다.

간만에 내리는 이 비가 무더운 여름날을 잠시 식혀 주는 것 같습니다.

지난 2달간 끊임없이 달려왔는데...

오늘은 TCP의 세계에서 잠시 머리를 식혀 가려고 합니다.

가벼운 마음으로 읽어주세요!

 

 

1. TCP의 꽃 3-way-handshaking

 

TCP통신과 UDP 통신의 가장 큰 차이점은 바로 신뢰성 통신이냐, 비신뢰성 통신이냐 입니다.

TCP는 신뢰성 통신을 보장합니다. 이를 보장하기 위한 방식으로 바로 3-Way-Handshaking이란 방식을 사용합니다.

흔히 3-Way-Handshaking을 서로 악수를 한다라고 표현합니다.

 

예를들면 PCServer랑 통신을 하고 싶어합니다.

PC : Server야 나랑 통신할래?

Server : 응 난 통신할 준비가 됐어, 너는?

PC : 응 나도 통신할 준비가 되었어! 

 

이처럼 서로 통신을 하기전 상대방의 안부를 물어보는 형태를 3-Way-Handshaking이라고 합니다.

모든 TCP통신은 아래의 그림처럼 통신을 하기 전 3-Way-Handshaking이라는 과정을 거치게 됩니다!

 

 

실제 Dump를 참고로 올려보았습니다.

위 그림에서 보이는 것처럼 SYN - SYN,ACK - ACK가 왔다갔다 하는게 보이시죠?

어디가서 3-Way-Handshaking이 뭐야라고 했을 때 틀리면 안됩니다!!

 

2. TCP의 머리구조

 

TCP 헤더는 어떻게 생겼을까요?

TCP는 신뢰성 통신을 보장하기 위해 많은 생각을 합니다.

즉 많은 구성요소들이 있습니다.

 

 

 

 

TCP의 머리구조를 보며 어떤 생각을 하는 것인지 알아보도록 하죠

 

Source Port : 패킷을 송신하는 Source의 포트번호

-> 내 Port는 이거니까 이쪽으로 답장 보내

Destination Port : 패킷을 수신하는 Destination의 포트번호

-> 난 너의 이 Port로 통신하고 싶어

Sequence Number : 4계층의 패킷 단위로 데이터의 순서번호를 표기

-> 내가 너에게 보내는 5번째 패킷이야

Acknowledg Number : 상대방으로부터 수신한 데이터의 바로 다음에 수신할 데이터 번호

-> 너가 보낸 3번째 패킷은 잘 받았다 4번 째 패킷 보내줘

Header Length : TCP 헤더의 전체 길이를 Byte 단위로 표시

-> 내가 보내는 패킷 크기는 이만큼이야

Reserved : 미래를 위해 예약된 필드로 0으로 표시

-> 미래가 언제 쯤 올까요...

Flags : 세그먼트의 용도와 내용을 결정하기 위해 사용

-> 내가 너에게 말하고 싶은 것은!

URG : 긴급하게 데이터 전송이 필요

ACK : TCP 헤더의 승인 필드에 값이 설정 됐음을 알림

PSH : 추가적인 데이터를 기다리지 말고 즉시 데이터 전송

RST : 연결을 리셋

SYN : 일련번호를 동기화

FIN : 더이상 보낼 데이터가 없음

 

Window Size : 송신 시스템에서 자신이 수용하는 버퍼의 크기

-> 내가 받아들일 수 있는 크기는 이만큼이야

Checksum : 데이터가 전송 중에 손실되지 않았는지 검사

-> 어라... 이거 오는길에 상한거 아니야?

Urgent Point : URG가 전송 되는 경우 데이터의 마지막 Byte의 일련번호를 표시

-> 야 이것부터 얼른 처리해줘!!

 

3. TCP 헤더의 실제 모습

 

말로만 해서는 도통 이게 무슨소리야라고 하실까봐

실제로 WireShark를 이용하여 TCP dump를 떠봤습니다.

TCP 헤더안에 어떻게 정보가 담겨서 전송되는지 확인해 볼까요?

 

TCP 헤더안의 내용을 보니 위에서 설명 했던 항목들이 들어가 있는 것이 보입니다.

대표적으로 Srouce Port, Destination Port, Sequence Number, Flags 등 TCP통신을 하기 위해 필요한 항목들이 채워져 있습니다.

 

오늘 설명드렸던 TCP에 대해서는 더욱 많은 내용들이 무궁무진 하지만 TCP가 과연 무엇일까 처음 생각해보기 위해 간단히 정리 해보았습니다.

 

나중에 더욱 많고 알찬 내용으로 다시 TCP에 알아보도록 하겠습니다.

오늘은 여기까지.

'OSI 7계층 > [LAYER 4] 전송 계층' 카테고리의 다른 글

DNS[Domain Name Service]  (0) 2018.10.07
UDP[User Datagram Protocol] WORLD!  (0) 2018.07.08
TCP와 UDP  (1) 2018.06.24
포트[PORT]에 대하여  (1) 2018.06.17