TCP에 대해 설명해주세요.
신뢰성 있는 통신을 가능하게 해주는 트랜스포트 레이어 프로토콜
pdu : 세그먼트
그외) tcp header
포트를 기준으로 통신하기 때문에 source port, dest port가 있음

Sequence number : 바이트 스트림 번호 (세그먼트 데이터의 첫바이트)
tcp는 데이터를 바이트들로 쪼개게 되는 게 이게 세그먼트이고 각 세그먼트마다 seq#이 붙는다. 나중에 수신 측에 데이터 재조립할 때 사용함.
Acknowledgement number
안전한 데이터 전달을 위해, 데이터를 잘 받았을 때 seq에 +1을 해준 번호.
flags
syc, ack, fin 등이 있음
window size
수신측의 윈도우 사이즈. 흐름 제어에 사용된다.
Flow control(흐름 제어)
어플리케이션에서 tcp 소켓 버퍼에서 가져가는 속도보다 송신자의 전송속도가 빠른 경우
수신자가 송신자를 제어한다. 송신자가 수신자의 버퍼를 넘치게 보내도록 하지 않는다.
이때 수신자의 버퍼가 아까 위에서 본 receiver window
Congestion Control (혼잡제어)
네트워크가 감당하기 어려울 정도로 너무 많은 출발지에서 너무 많은 데이터를 보내서 생기는 이슈를 처리하기 위함.
to be continued...
Tcp 빠른 재전송

중복된 ack 3개를 받았을 경우 타임아웃을 기다리지 않고도 전송 시 세그먼트가 누락된 걸 알 수 있다.
따라서 타임아웃을 사용하지 않고도 빠르게 문제를 발견하고 재전송 할 수 있기 때문에 빠른 재전송이라고 한다.
3way handshake (연결)
신뢰성 있는 연결을 위해 시퀀스 번호 교환과 정책 교환 mss(maximum segment size) 를 맞춘다.
1. client: syn(ex- 1000) 보내기
2.server : syn(ex- 4000) + ack (1000 + 1) => syn 과 ack를 따로 보내지 않고 같이 보냄
3.client가 받은 syn를 다시 ack (4000 + 1) 로 보냄.

4 way handshake (연결 종료)


1. client가 fin을 서버에게 보냄
2. 서버는 ack (fin + 1)를 보내게 됨
이때 약간 Wait 함 - 아직 보내지 못한 데이터가 남아있을 수도 있기 때문
3. 그리고 서버는 드디어 fin 을 클라이언트에게 보낸다. -
4. 클라이언트는 fin을 +1 해서 ack를 보낸다.
데이터 재전송
- Client 패킷 송신
- server에서 ack 송신
- ack를 수신하지 못하면 재전송
UDP
pc나 서버 등에 도달한 데이터를 적절한 어플리케이션에 배분하는 기능만 있는 프로토콜
비교적 데이터의 신뢰성이 중요하지 않을 때 사용. (신뢰성을 체크하는 로직 없음 ) -> 데이터 전송 효율이 좋음
데이터 분할 기능이 없어 어플리케이션 쪽에서 데이터를 적절한 크기로 잘라야함.
upd 헤더
Erro detection - checksum에서 에러 방출
포트번호랑 길이, 체크섬 적어서 그냥 쏘는 프로토콜

'CS' 카테고리의 다른 글
네트워크 스터디 마지막 과제 (후기) (0) | 2024.02.14 |
---|---|
네트워크 5주차 스터디 (0) | 2024.02.08 |
네트워크 스터디 3주차 (0) | 2024.01.25 |
네트워크 스터디 2주차 (0) | 2024.01.18 |
네트워크 스터디 1주차 (0) | 2024.01.11 |