728x90
TCP 소켓에 존재하는 입출력 버퍼
- 입출력 버퍼는 TCP 소켓 각각에 대해 별도로 존재
- 소켓 생성 시 자동으로 생성됨
- write 시에 바로 수신측의 입력 버퍼로 가는것이 아니라 송신 측의 출력 버퍼에 먼저 저장
- 입력 버퍼가 받을 준비가 됐을 때 출력 버퍼에 담은 데이터를 보내줌
TCP의 내부 동작 원리
- 상대 소켓과의 연결
-> 접속을 요청하는 쪽에서 SYN 신호 패킷을 보냄
-> Server에서는 SYN, ACK 신호를 클라이언트 쪽으로 보냄
-> 클라이언트에서 다시 ACK 신호를 보냄으로써 연결이 이루어짐
-> sequence number는 패킷 번호
-> 받은 쪽은 다음에 요청할 패킷 번호를 ack number를 통해 전달
- 데이터 송수신
-> 연결 후 데이터를 송수신
-> 데이터를 보낸 패킷에 대해 ack number를 sequence number + 전송된 바이트 크기 + 1로 받음
-> 전송된 바이트 크기를 포함해서 받음으로써 데이터의 손실 유무도 확인
-> 패킷 전송 시 타이머가 작동해서 일정 시간 안에 ack 메세지가 오지 않을 경우 재전송
- 연결 종료
-> 4단계에 거쳐서 연결을 종료
-> 양쪽 모두 정상적 종료를 위해서 fin 신호를 서로 주고 받음
728x90
'Programming > Network' 카테고리의 다른 글
열혈 TCP/IP 06-2. UDP 기반 서버/클라이언트의 구현 (0) | 2021.02.17 |
---|---|
열혈 TCP/IP 06-1. UDP에 대한 이해 (0) | 2021.02.16 |
열혈 TCP/IP 05-1. 에코 클라이언트 (0) | 2021.02.14 |
열혈 TCP/IP 04-3. Iterative 서버 (0) | 2021.02.14 |
열혈 TCP/IP 04-2. TCP 기반 서버와 클라이언트의 구현 (0) | 2021.02.14 |