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에는 랜덤한 수가 담겨질까?
단순히 응답을 주고받는데 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의 차이점?
'To be Developer > Etc' 카테고리의 다른 글
[Git] pull, merge, rebase 차이 및 옵션 (0) | 2019.11.06 |
---|---|
Deploy시 Class의 load 우선순위 정리 (1) | 2019.07.17 |
Eclipse STS 튜닝 STS.ini (Freeze 현상 해결을위한) (2) | 2019.05.01 |
오픈소스나 소스 라이브러리 release 시 GA, SNAPSHOT의 의미 (0) | 2019.04.12 |
[ETC 펌] 보일러 플레이트 코드란? (1) | 2018.03.05 |