본문 바로가기

CS/네트워크

TCP : 3-웨이 핸드쉐이크와 4-웨이 핸드쉐이크, TIME_WAIT

TCP 연결 성립 과정

= 신뢰성을 확보할 때 '3-way-handshake'라는 작업을 진행

 

- SYN 단계: 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보낸다. ISN은 새로운 TCP 연결의 첫 번째 패킷에 할당된 임의의 시퀀스 번호를 말하며 (ex. 12010) 이는 장치마다 다를 수 있다. [서버가 listen 상태가 되어야 클라이언트에서 보낸 걸 받을 수 있다 / 서버를 열 때 listen이라는 메소드를 사용하는데, 그 listen이라고~]

- SYN + ACK 단계: 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN+1을 보낸다.

- ACK 단계: 클라이언트는 서버의 ISN+1 한 값인 승인번호를 담아 ACK를 서버에 보낸다. 이렇게 3-way-handshake 과정 이후 신뢰성이 구축되고 데이터 전송을 시작.

    - 참고로 TCP 과정이 있기에 신뢰성이 있는 계층이라고 불리우는 것!

    - 반대로 UDP는 이 과정이 없기에 신뢰성이 없는 계층이라고 하는 것~~

 

+ 해당 그림의 과정이 중요하고, 특히 승인번호를 보낸다는 문장? 단어?가 중요하다고 한다~

 

용어 정리

- SYN: SYNchronization의 약자, 연결 요청 플래그 (SYN = 동시에 발생하다)

- ACK: ACKnowledgement의 약자, 응답 플래그 (ACK = 승인하다)

- ISN: Initial Sequence Numbers의 약어, 초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 번호

 

TCP 연결 해제 과정

= 연결을 해제할 때 4-way-handshake 과정이 발생

1. 먼저 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보냅니다. 그리고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다립니다.
2. 서버는 클라이언트로 ACK라는 승인 세그먼트를 보냅니다. 그리고 CLOSE_WAIT 상태에 들어갑니다. 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어갑니다.
3. 서버는 ACK를 보내고 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보냅니다.
4. 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 됩니다. 이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제됩니다.

 

Q TIME_WAIT을 왜 사용? 그냥 연결을 닫지?

A

1. 지연 패킷이 발생할 경우를 대비하기 위함. 패킷이 뒤늦게 도달하고 이를 처리하지 못하면, 데이터 무결성 문제가 발생해서

2. 두 장치가 연결이 닫혔는지 확인하기 위함. 만약 LAST_ACK 상태에서 닫히게 되면 다시 새로운 연결을 하려고 할 때 장치가 줄곧 LAST_ACK로 되어있기에 접속 오류가 나타나게 된다.

∴ 따라서 잠시 기다릴 시간이 필요하다.

 

+ 4way도 중요하고, 그림을 보면서 이해하며 기억해야한다고..

 

용어 정리

- TIME_WAIT: 소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태를 말하며 지연 패킷 등의 문제점을 해결하는 데에 쓰임. CentOS6, ubuntu = 60초로 설정, windows = 4분 설정. ▶ 즉 OS마다 조금 다름

- 데이터 무결성(data integrity): 데이터의 정확성과 일관성을 유지하고 보증하는 것

 

 

출처 : https://malgun-gothic.tistory.com/96

 

[CS study] TIL - 네트워크(Network): TCP/IP 4계층

#전체적으로 참고한 사이트 - OSI 7 layer = #이전에 정리했던 포스터 참고! - TCP/IP 4계층 = #참고한 강의 인터넷 프로토콜 스위트(internet protocol suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는

malgun-gothic.tistory.com

 

'CS > 네트워크' 카테고리의 다른 글

주소창에 www.naver.com을 치면 어떻게 될까 ?  (0) 2022.07.25
IP주소  (0) 2022.07.25
TCP와 UDP의 차이  (0) 2022.07.25
TCP/IP 4 계층 모델  (0) 2022.07.25
네트워크 기초  (0) 2022.07.25