[Network] TCP Socket communication
Updated:
Socket 정의
- 소켓은 통신의 소프트웨어적 개념
- 어플리케이션이 TCP/IP 네트워크에 연결할 수 있도록 함
- 특정 호스트의 어플리케이션은 소켓을 생성하고, 다른 호스트의 어플리케이션에 연결
- 앱 사이의 메시지들은 소켓을 거쳐감
Virtual TCP/UDP connections
- 소켓은 호스트 사이의 가상 TCP/UDP 채널 역할
- 앱이 실행되면 포트 번호가 부여
- 다른 호스트와 통신하고 싶을 때 소켓 생성
- 위의 예는 3가지 앱이 3가지 TCP 채널을 이용해 통신하는 모습
TX & RX buffers
- 소켓은 송신/수신 메모리 버퍼로서 물리적으로 구현
- 프로세스는 메세지를 transmit buffer에 write
- 같은 주기로 다른 호스트의 프로세스가 receive buffer 확인
- Transport layer가 receive buffer에 메시지를 write 함으로써 메시지 전송
- Transport layer는 주기적으로 소켓의 tx buffer를 체크하여 보낼 메시지 있는지 결정
TCP connection/disconnection
- 3-way handshake (connection establish)
- server : 소켓 생성 -> binding(소켓에 ip 할당하는 과정) -> listening(client의 연결 대기)
- client : 소켓 생성 -> connect -> 3-way handshake 시작
- SYN(c-s) -> SYN/ACK(s-c)(established) -> ACK(c-s)
- data transfer
- client tx 버퍼에 메시지 write
- trnaport layer 통해 server rx 버퍼에 메시지 write
- server rx 버퍼 메시지 read
- 반대동작 동일
- 4-way handshake (connection termination)
- client : close
- FIN(c-s) -> ACK(s-c) -> FIN(s-c) -> ACK(c-s)
Leave a comment