CS 공부

TCP 3 way handshake & 4 way handshake 본문

CS공부/컴퓨터네트워크

TCP 3 way handshake & 4 way handshake

kluiop1 2021. 6. 23. 18:34

TCP 3 way handshake(TCP 연결)

과정

[1] 클라이언트 프로세스는 서버 프로세스에게 연결을 요청하는 syn 세그먼트을 보냄

추가로 클라이언트는 최초의 순서번호를 선택하고 SYN 세그먼트에 순서번호 필드에 이 순서번호를 넣는다.

해당 순서번호는 보낸 패킷의 순서를 확인할 때 사용하는데 1부터 사용하는 것이 아니라 무작위의 순서번호를 선택하는 것은 보안 공격을 피하기 위해 순서번호를 적절히 임의로 추출한다.

-> Client > Server : TCP SYN세그먼트

-> ClientSYN/ACK세그먼트을 기다리는 상태가 된다.

 

[2] 서버가 SYN패킷을 받으면 서버는 새로운 소켓을 생성하고 연결 승인 세그먼트 (SYN/ACK 세그먼트)를 전송한다.

세그먼트 헤더에 3개의 아래와 같은 중요 정보를 포함한다.

1. SYN 플래그비트를 1로 설정

2. TCP 세그먼트 헤더의 확인 응답필드는 SYN 세그먼트로 받은 순서번호 + 1 로 설정

3. 서버는 자신의 최초의 순서번호를 선택하고 이 값을 순서번호 필드에 넣는다.

3번의 경우 클라이언트의 순서번호 선정 방식과 동일하게 보안 공격을 회피하기 위해 적절히 임의의 번호를 선정한다.

-> Server > Client : TCP SYN/ACK세그먼트

-> ServerSyn세그먼트을 받고 SYN/ACK을 발송(연결 승인)

-> Ack세그먼트을 기다리는 상태가 된다.

 

[3] 클라이언트는 연결이 성립되었음을 확인하고 ACK세그먼트을 다시 서버로 보내고 이를 받은 서버는 TCP연결이 성립됨을 확인한다.

ACK 세그먼트에는 SYN/ACK세그먼트에서 받은 순서번호 + 1을 확인응답 필드로 설정한다. 그리고 연결이 성립되었으므로 SYN 플래그 비트는 0으로 설정하여 전송한다.

-> Client > Server : TCP ACK

-> ClientSYN/ACK 받고 연결이 성립됨 ACKserver로 전송

-> ServerACK를 받고 연결이 성립됨

 

3way handshake 역할

양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이타 전달이 시작하기전에 한쪽이 다른 쪽이 준비되었다는 것을 알수있도록 한다.

양쪽 모두 상대편에 대한 초기 순차일련변호를 얻을 수 있도록 한다.

 

TCP 4 way handshake(TCP 연결 해제)

 

[1] 클라이언트 TCP가 서바 프로세스에 종료 세그먼트(FIN 세그먼트)를 보낸다.

[2] 서버가 FIN 세그먼트를 수신하면 서버는 클라이언트에게 확인 세그먼트(ACK 세그먼트)를 보낸다.

그리고 서버는 종료 프로세스를 위해 잠시 cose wait 상태로 진입

[3] 서버가 통신이 끝나면 서버는 자신의 종료 세그먼트(FIN 세그먼트)를 보낸다.

[4] 마지막으로 클라이언트는 서버의 종료 세그먼트에 확인 응답을 한다(ACK 전송)TCP 3 way handshake(TCP 연결)

이 때, TIME WAIT 상태로 진입한다. 왜냐하면, 클라이언트가 보낸 ACK를 네트워크 오류 등으로 도착하지 않았을 경우를 고려한다. 서버측에서 ACK를 받지 못하면 서버는 클라이언트가 FIN을 받지 못했다고 간주해서 FIN 패킷을 클라이언트에게 다시 보낸다. (그럴 경우 나중에 접속한 클라이언트가 연결하자마자 FIN 패킷을 받고 연결이 끊어지는 상황이 발생할 수 있기 때문에 클라이언트 쪽에서도 충분한 시간을 기다려서 서버가 ACK를 받았는지 아닌지 MSL시간만큼 기다리는 것이다)

 

Piggyback(편승) - 확인응답

TCP는 패킷 전송의 안정성, 신뢰성을 보장하기 위해 순서대로 잘 갔는지 검증하고 잃어버린 패킷이 없는 지 확인한다. 각 TCP 세그먼트는 순번과 데이터 무결성 체크섬을 가지는데, 수신자는 데이터를 잘 받으면 이에 대한 확인응답 메시지를 송신자에 보낸다. 확인응답의 크기는 매우 작기 때문에, 같은 방향으로 송출되는 TCP 패킷에 편승시켜서 보내고자 하고, 이런 패킷을 찾는 것을 확인응답 알고리즘이라고 한다. HTTP같은 경우는 요청과 응답 등으로만 이뤄져서 얹혀 갈 패킷이 많지가 않다. 편승할 패킷을 찾을 때 걸리는 시간을 확인응답 지연이라고도 한다. 일정 시간 안에 송출 패킷을 찾지 못하면 확인응답은 별도의 패킷으로 전송된다.

 

참고: https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake

'CS공부 > 컴퓨터네트워크' 카테고리의 다른 글

UDP란  (0) 2021.06.26
HTTP & HTTPS  (0) 2021.06.26
대칭키 & 공개키  (0) 2021.06.26
TCP/IP 흐름제어 & 혼잡제어  (0) 2021.06.24
OSI 7 계층  (0) 2021.06.23