🗂️ INDEX

글 작성자: Universe7202

[TCP 란?]

  • 전송 제어 프로토콜(Transmission Control Protocol)
  • 인터넷에 연결된 컴퓨터 간의 정보 를 안정적이고 순서대로, 에러없이 교환할 수 있게 한다.
  • 연결 및 데이터 전송을 하기 위해 3 way handshake와 연결 종료를 위해 4 way handshake를 한다.
  • 안정성을 필요로 하지 않을 경우 TCP 대신 UDP(User Datagram Protocol)을 사용한다.  UDP의 예로는 인터넷 방송 등이 있다.

 

 

[3-way-hand-shake]

3wayhandshake는 client가 server에 요청하고 server에게 데이터를 받기 위해 신뢰성 연결을 하게 된다.

 

 

client가 Server에게 SYN(a) 패킷을 보낸다. 이때 a는 Sequence Number를 뜻한다.

Sequence Number 값은 랜덤으로 설정되는데 이 설명은 맨 아래에 적어 놓았다.

– SYN(Synchronization) : 연결 요청, 세션을 설정하는데 사용되며 초기에 Sequence Number를 보냄

 

 

Server는 연결 요청을 받게 되고, 연결 수락을 위해 ACK(a+1) + SYN(b) 패킷을 보낸다.

이때 b는 Server의 Sequence Number를 뜻하고, ACK를 보낼때 Client로 부터 받은 Sequence Number인 a에 +1 한 값을 보낸다.

– ACK(Acknowlegdement) : 승인을 뜻한다.

 

 

Client는 SYN(b)를 받아 Server에게 ACK(b+1) 패킷을 보낸다.

이렇게 3번의 과정을 거치게 되면 Client와 Server 간의 연결이 성립(Establish)이 되어 Server로 부터 데이터를 받게 된다.

 

 

위 과정을 wireshark를 통해 한번더 보자.

Client : 172.30.1.25

Server : 222.96.129.211

 

1.  Client가 Server에게 SYN(0)을 보낸다.

2. Server는 Client에게 ACK(1) + SYN(0)을 보낸다.

3. Client는 Server에게 ACK(1)을 보낸다.

4. 연결이 성립 되었으므로 4번째 줄을 보면 Client가 Server에게 HTTP프로코톨로 /wp-admin/  의 정보를 요청한다.

 

 

[4-way-hand-shake]

4wayhandshake 는 연결 해제를 하기 위한 과정이다.

 

1.  Client가 연결을 종료 하겠다고 FIN 패킷을 보낸다.

2. Server는 FIN을 받고 확인 메시지인 ACK를 보낸다. 그 후 데이터를 모두 보낼 때까지 잠깐 TIME_OUT이 된다.

3. 데이터를 다 보냈을 경우, 연결이 종료 되었다고 FIN 패킷을 Client에게 보낸다.

4. Client는 FIN 패킷을 받고 확인 메시지인 ACK를 보낸다.

5. Server는 소켓 연결을 close 한다.

6. Client는 아직 서버로 부터 받지 못한 데이터가 있을 것을 대비해 일정 시간 동안 세션을 남겨놓고 패킷을 기다리는 과정을 거친다. (TIME_WAIT)

 

 

 

아래 글은 https://asfirstalways.tistory.com/356 에 설명이 잘 되어 있어서 가져온 것이다.

[Sequence Number가 랜덤으로 생성되는 이유]

처음 클라이언트에서 SYN 패킷을 보낼 때 Sequence Number에는 랜덤한 숫자가 담겨진다. 초기 sequence number를 ISN이라고 한다.

ISN이 0부터 시작하지 않고 난수를 생성해서 number를 설정하는 이유는 무엇인가?

Connection을 맺을 때 사용하는 포트(port)는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용된다.

따라서 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용하는 가능성이 존재한다.

서버 측에서는 패킷의 SYN을 보고 패킷을 구분하게 되는데 난수가 아닌 순차적인 number가 전송된다면 이전의 connection으로부터 오는 패킷으로 인식할 수 있다. 이러한 문제가 발생할 가능성을 줄이기 위해서 난수로 ISN을 설정하는 것이다.

 

 

 

Reference

https://ko.wikipedia.org/wiki/%EC%A0%84%EC%86%A1_%EC%A0%9C%EC%96%B4_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

https://asfirstalways.tistory.com/356

http://blog.naver.com/PostView.nhn?blogId=stop2y&logNo=220236963190&parentCategoryNo=&categoryNo=40&viewDate=&isShowPopularPosts=false&from=postView

https://needjarvis.tistory.com/157