728x90
TCP(Transmission Control Protocol)란?
- 서버와 클라이언트간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜
- 데이터를 전송하기 전에 데이터 전송을 위한 연결을 만드는 연결지향 프로토콜
- 데이터는 네트워크선로를 통해 전달되는 과정에서 손실되거나 순서가 뒤바뀌어서 전달될 수 있는데, TCP는 손실을 검색해내서, 이를 교정하고 순서를 재조립할 수 있도록 해준다.
TCP는 데이터 전송의 신뢰성을 더하기 위해서 데이터를 세그먼트 단위로 분할하고, 전송 속도를 조절하며, 데이터가 제대로 전달되지 않았을 경우 재전송을 한다.
TCP의 세그먼트는 데이터 본채에 TCP헤더가 붙은 형대로 구성되어 있다.
TCP 통신은 커넥션을 맺는 단계는 3단계로 진행되며 이를 3방향 핸드셰이크라고 부른다.
TCP 소켓으로 클라이언트와 서버가 연결되는 과정을 3 way hand shake라고 한다.
- 클라이언트는 서버에 접속요청(sync)을 하고 클라이언트는 sync_sent 상태가 됨.
- 서버는 요청수락(sync + ack)하고 서버는 sync_received 상태가 됨.
- 클라이언트는 서버에 수락확인(ack)을 보내고 established 상태가 됨.
TCP 연결을 끊는 과정
TCP소켓 연결을 종료하는 과정을 4way hand shake 라고한다.
- 클라이언트가 서버에 연결을 종료(fin) 플래그를 전송, 클라이언트는 종료신호를 기다리는 상태 fin_wait1
- 서버는 일단 확인(ack)했다는 메시지를 보내고 자신의 통신이 끝날 때 까지 기다리게함. 서버는 close wait 상태. 클라이언트는 종료신호를 기다리겠다는 fin_wait2 상태 전환
- 서버가 통신이 끝나면 이제 종료해도 된다는 (fin) 플래그를 클라이언트에 전달. 서버는 last_ack 상태로 전환, 클라이언트는 time_wait 상태 전환
- 클라이언트는 연결종료를 확인했다는 응답(ack) 플래그를 보냄. 서버상태는 close
참조
728x90
'네트워크' 카테고리의 다른 글
DNS Round Robin (0) | 2021.04.18 |
---|---|
HTTP, HTTPS, HTTP2 (0) | 2021.04.18 |
UDP 란 무엇인가 (0) | 2021.04.18 |