3-way handshake 

 3-way handshake란 TCP/IP 에서 호스트와 서버가 Connection 을 맺을때 수행되는 전송제어 프로토콜(Transmission Control Protocol) 이다.  (SYN-SYN-ACK 라고도 한다.)

순서는 다음과 같다. Host A가 server, B는 client라고 가정하자.

1. HOST A는 B에게 TCP SYNchronize packet을 보낸다
2. B는 A에게  SYN 패킷을 받는다. 이후 SYNchronize-ACKnowledgement 패킷을 보낸다.
3. A는 B의 SYN-ACK를 수신후 다시 A에게 ACKnowledge 패킷을 보낸다.
4. B가 ACK를 수신하고 TCP 소켓이 ESTABLISHED 된다.

 

 위 그림에서 SYN 패킷을 보낼때, M과 N이 보이는데 이는 Sequence Number 라 한다, 여기에 랜덤한 숫자가 담겨진다. 초기 Sequence Number를 ISN이라 하는데, 이는 0이 아닌 랜덤한 숫자가 보내진다. 
 

왜 ISN에는 랜덤한 수가 담겨질까?

 https://www.quora.com/Why-in-a-TCP-sequence-is-a-number-taken-as-a-random-number-and-what-is-the-actual-number-at-the-start?awc=15748_1574583388_8da30461914e738de7495e39d9ab34b1&uiv=6&txtv=8&source=awin&medium=ad&campaign=uad_mkt_en_acq_us_awin&set=awin&pub_id=85386

 

Why in a TCP sequence, is a number taken as a random number and what is the actual number at the start?

Answer: There are two underlying reasons for the use of random sequence number Why they came into existence? The port numbers in TCP connections come from a finite range and, as such, are reused over time. As such, it is possible that two communicating hos

www.quora.com

 

단순히 응답을 주고받는데 2-way Handshake면 충분해보이지 않는가? 왜 3-way 일까?

 TCP/IP 통신은 양방향성 connection 이다. A host가 B host에게 존재를 알리고 패킷을 받을수있다는 것을 증명하듯이, B host도 패킷을 보낼수 있다는 신호를 보내야한다. 이는 2-way handshaked에서는 성립될 수 없다.

 

4-way handshake

 TCP연결이 해제 될때는 FIN 패킷, ACK 패킷을 각각 한번 씩 주고 받으면서 연결을 종료 하게 된다. 이를 4 way handshake라 한다


ESTABLISHED 된 소켓을사용하는 A Host와 B Host가 있다. A HOST는 이제 연결을 종료하려고한다.
 1) A host는 B호스트에게 FIN Flag 패킷을 보내고 socket의 상태가 FIN_WAIT_1 이 된다.
 2) FIN 을 수신한 B는 ACK를 전송하고 socket의 상태가 CLOSE_WAIT로 변경한다.
 3) ACK를 수신한 A는 B가 잘받았다고 판단하고 FIN_WAIT_2 의 상태로 소켓을 변경한다.
 4) B는 A에게 FIN을 전송하고 소켓을 LAST_ACK로 변경한다.
 5) FIN을 수신한 A는 B에게 ACK를 전송한뒤 상태를 TIME_WAIT 상태로 변경한다.
 6) B는 ACK를 수신하고 소켓을 CLOSED 한다.

 

CLOSE_WAIT 와 TIME_WAIT 상태란 무엇일까?

 TIME_WAIT 상태로 대기하는(60s) 이유는, 세션 종료후, 혹시나 네트워크에 아직 라이브 패킷이 존재할수도 있기때문이다.

process와 thread의 차이점?

 

 

+ Recent posts