네트워크 - [TCP] handshake

고태희·2022년 3월 10일
0

CS

목록 보기
13/20

TCP 특징 중 신뢰성보장,연결지향이 있다. 그 때문에 나온 것이 handshake이다.

신뢰성 보장

TCP는 신뢰성 있는 연겳을 보장하기 때문에 이를 위해 연결을 생성하고 종료하는 순간에도 handshake라는 특병한 과정을 거치게 되는것이다.

연결지향

여기서 "연결"은 논리적인 연결을 의미한다.
논리적인 연결을 지향하는 이유는 연속적인 데이터 전송의 신뢰성을 위함이다. (전화기 생각. 하나의 전화선에 여러전화가능)

  • 데이터는 여러개의 패킷으로 쪼개져서 전송된다. 덕분에 회선을 점유하지 않고 적은 양의 회선으로도 동시 통신가능하다.
  • 이 때, 누가 몇번째로 보낸 패킷이라는 정보가 필요하다. 그게 없으면 뒤죽박죽이 됨
    • 누구와 통신하는지, 내가 받을 데이터의 시퀀스가 몇번인지와 같은 정보를 handshake에서 사용하게됨

TCP는 상대방과 연결상태를 만들거나(3) 종료할 떄(4) 특별한 과정을 거치게 되는데 이것이 TCP handshake인 것이다.

3 way handshake - 연결 성립


편의상 왼쪽을 A, 오른쪽을 B... A가 client, B가 server가 될 수 있다.

  1. A가 랜덤한 시퀀스 번호를 생성해 SYN 패킷에 담아 전송
  2. B가 SYN 제대로 받으면 확인의 의미인 ACK와 새로운 SYN을 생성(약속이 정해져있다. 보통 받은 시퀀스 +1) 해서 전송
  3. A가 SYN을 제대로 받았으면 B한테 ACK를 보냄

=> 이 과정이 끝나면 신뢰성 있는 연결이 생성괴었다 판단하고 통신시작

4 way handsake - 연결 종료

사실 연결의 생성보다 연결의 종료가 중요한데, 그이유는 생성이 안된것은 다시 또 생성하면 그만이지만, 만일 일방적으로 한쪽에서 연결을 종료해버리면 상대방은 연결이 종료된지 아닌지 모르고 계속 대기하는 상태가 될 수 있다. 그러면 데드락발생 가능성 있다.

  1. A가 연결을 종료하고자 하는 FIN 플래그를 전송
  2. B가 FIN을 받고 확인헀다는 ACK를 다시 전송한다. 이때, 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 된다.
  3. 데이터를 모두 내보냈다면, B도 FIN을 전송한다.
  4. 여기서 A에게 잠깐의 TIME_WAIT이 생기는데, 이는 혹시 모를 데드락을 방지하고자 함이다.
    FIN을 받았으면 확인했다는 ACK를 다시 전송한다.

=> 연결 종료

0개의 댓글

관련 채용 정보