TCP의 연결, 데이터 전송, 해제 과정 한 눈에 보기

 

서버 : socket() 생성 → bind() 소켓 주소할당 → listen() 연결요청 대기상태 → accept() 연결허용 → read/write() 데이터 송수신 → close() 연결종료

클라이언트 : socket() 생성 → connect() 연결요청 → read/write() 데이터 송수신 → close() 연결종료

 

 

3-way handshake : TCP 연결

서버 listen() 상태 

1) 클라이언트 connect(), C->S 접속요청 패킷 SYN(M) 전송  

2) 서버 accept(), S->C 요청 수락 패킷 ACK(M+1), SYN(N) 전송 

3) 클라이언트 connect(), C->S 요청 수락 확인 패킷 ACK(N+1) 전송

연결 성립 (Established)

 

3-way handshake

 

4-way handshake : TCP 해제

Established 상태

1) C->S 연결 종료요청 FIN FLAG 전송

2) S->C 종료 수락 메시지 ACK 전송

   일시적 TIME_OUT (데이터를 모두 보낼 때 까지)

3) S->C 연결 종료 FIN FLAG 전송

4) C->S 확인 메시지 ACK 전송

서버 소켓 연결 close(), 클라이언트 일정 시간 동안 TIME_WAIT (잉여패킷 대기)

 

4-way handshake


TCP flag(URG, ACK, PSH, RST, SYN, FIN)

FLAG 순서  - | URG  | ACK | PSH | RST | SYN | FIN |

각각 1비트로 TCP 세그먼트 필드 안에 CONTROL BIT 또는 FLAG BIT 로 정의 되어 있다.

 

 

SYN(Synchronization:동기화) - S : 연결 요청 플래그

TCP 에서 세션을 성립할 때  가장먼저 보내는 패킷, 시퀀스 번호를 임의적으로 설정하여 세션을 연결하는 데에 사용되며 초기에 시퀀스 번호 (ISN) 를 보내게 된다.

 

시퀀스 랜덤인 이유
Connection시 사용하는 포트는 유한 범위 내 사용되고 시간이 지나면 재사용 됨
= 두 통신 호스트가 과거 사용된 포트 번호쌍을 사용할 가능성이 있음 
>>> SYN의 시퀀스가 순차적일 경우 서버에서는 SYN으로 패킷 구분하므로 이전 Connections에서 오는 패킷으로 인식 가능  

 

ACK(Acknowledgement) - Ack : 응답

상대로부터 패킷을 받았다는 걸 알려주는 패킷, 다른 플래그와 같이 출력되는 경우도 있음
수신자가 송신자 시퀀스 번호에 길이 또는 데이터 양을 더해 ACK를 전송 (일반적으로 +1)

ACK 응답을 통해 보낸 패킷에 대한 성공, 실패를 판단하여 재전송 하거나 다음 패킷을 전송

 

FIN(Finish) - F : 연결 종료 요청
세션 연결을 종료시킬 때 사용. 더이상 전송할 데이터가 없음을 나타냄

 

RST(Reset) - R : 연결 종료
재설정(Reset)을 하는 과정, 양방향에서 동시에 일어나는 중단 작업

비 정상적인 세션 연결 끊기. 현재 접속하고 있는 곳과 즉시 연결을 끊고자 할 때 사용

 

PSH(Push) - P : 밀어넣기

받은 데이터를 버퍼가 채워지기를 기다리지 않고 (버퍼링 없이) 즉시 목적지인 OSI 7 Layer 의 Application 계층으로 전송

TELNET 과 같은 상호작용, 빠른 응답이 중요한 프로토콜(대화형 프로토콜)에 사용

 

URG(Urgent) - U : 긴급 데이터
Urgent pointer가 유효한 것인지를 나타냄. 긴급 데이터로 다른 데이터에 비해 우선순위가 높아야 함 
(ex. ping 명령어 실행 도중 Ctrl+c 입력)

 

Placeholder             
패킷의 플래그에 SYN, FIN, RST, PSH등의 플래그가 설정 되어 있지 않은 경우 세팅됨

ACK플래그와 함께 사용되기도 함

 

 


Reference

 

[TCP] 3-way-handshake & 4-way-handshake

[TCP] 3-way-handshake & 4-way-handshake 연결 성립(Connection Establishment) 1) 클라이언트는 서버에 접속을 요청하는 SYN(a) 패킷을 보낸다. 2) 서버는 클라이언트의 요청인 SYN(a)을 받고 클라이언트에게..

asfirstalways.tistory.com

 

 

TCP 통신 과정 및 비정상 종료(TCP 3,4-way handshake)

TCP Handshake 란? OSI 7계층 중 Network layer에 해당하는 프로토콜인 TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 3-way handshake를 사용하고 세션을 종료를 성립하기 위해 4-way handsh..

www.crocus.co.kr

 

 

gyoogle/tech-interview-for-developer

👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

github.com

 

반응형

+ Recent posts