https://www.maeil-mail.kr/question/76
요약: TCP-3 way handshake
는 TCP/IP체계에서 안정적으로 통신을 하기 위해서 맨 처음에 서버와 클라이언트가 데이터를 주고 받아도 되는지에 대해서 서로 일종의 약속을 하는 과정이다. 이 약속을 통해서 신뢰성,순서성등을 보장 할 수 있다. 3way handshake는 statefull로써 이루어지는 통신이다.
TCP를 공부하는 과정에서 패킷,데이터 세그먼트에 대해서 햇갈려서 PDU에 대해서 다시 한번 살펴보았다.
Application layer의 data는 캡슐화를 통해서는 data link layer의 Frame으로 된다.
이 과정에서 헤더와 뒤에 트레일러가 계속 붙는다.
TCP는 IP계층의 프로토콜이므로 기본적으로 세그먼트 단위의 송,수신을 한다.
실제 인터넷에서 www.naver.com을 누르면, DNS system에 의해서 ip주소를 찾고, 그 후에 3-way handshake가 진행돼.
tcp에서 패킷을 주고 받기 위해서는 서버와 클라이언트는 둘 다 establish 상태가 되어야한다.
이 establish 상태가 되기 위해서 데이터를 주고 받기전에 3번의 연결을 해도되는지에 대해서 서로 물어보는데, 이 과정을 3-way handshake
이라고 한다.
3-wayhandshake에서는 기본적으로 SYN 패킷과 ACK 패킷 을 통해서 연결과정을 수립한다.
이는 TCP 플래그에서 적어서 표시한다.
연결과정은 다음과 같다.
1.클라이언트는 SYN패킷을 서버로 보낸다.(보내고 나면 클라이언트에서는 SYN-Sent로 상태가 변경됨)
2. 서버는 SYN,ACK패킷을 클라이언트로 보내서 SYN패킷을 잘 받았다는 응답을 보낸다.
(서버는 Listen에서 SYN-RECEIVED로 변경된다. )
3. SYN,ACK 패킷을 받는 클라이언트는 잘 받았다는 의미로 서버로 ACK 패킷을 보낸다.
(이 과정을 통해서 서버와 클라이언트 모두 established로 변경된다.)
1의 과정에서는 데이터를 얼만큼 보낼지에 대한 윈도우 크기와, 초기 순서번호를 포함한다.
2의 과정에서는 방금 받은 초기 순서번호+1을 확인 응답번호를 통해서
이를 통해서 2,3과정에서의 순서 번호+1을 응답으로 보내에서 다음 데이터가 잘 오는지를 확인한다.
SYN number는 해당 데이터가 어느 위치 인지를 수신측에 알려주고 ACK Number는 수신측에서 송신측으로 다음 데이터는 어떤게 와야하는지를 알려준다.
출처: https://velog.io/@hidaehyunlee/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%84%B8%EA%B7%B8%EB%A8%BC%ED%8A%B8-%ED%8C%A8%ED%82%B7-%ED%97%B7%EA%B0%88%EB%A6%B4-%EB%95%90-PDU%EB%A5%BC-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90
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