TCP의 송수신 방법
참고) 세션 계층에서의 파일을 추상화한 것이 소켓
소켓에서 패킷을(사실은 세그먼트)를 받아 프로세스 식별자인 port를 통해 stream이 된 데이터를 분배한
즉, user mode application에서 process가 어떤 파일에 Stream 데이터를 write하는 과정을 생각해보자
Stream 형태의 데이터를 kernel인 TCP 즉 transport 계층을 만나 세그먼트로 분해가 되고,
segment를 IP 계층 즉, Network 계층으로 내려보내면 packet으로 묶인다
이 packet을 하드웨어로 내려보낼 때는 Frame이라는 이름으로 보낸다.
클라이언트 , 서버가 있을 때 그림은 이렇다
소켓 = TCP,IP의 추상화
- Step 1 (SYN):
처음으로, sender는 receiver와 연결 설정을 위해, segment를 랜덤으로 설정된 SYN(Synchronize Sequence Number)와 함께 보냅니다. 이 요청은 receiver에게 sender가 통신을 시작하고 싶다고 알립니다. - Step 2(SYN / ACK):
receiver 는 받은 요청을 바탕으로 SYN/ACK 신호 세트를 응답합니다.
Acknowledgement(ACK) 응답으로 보내는 segment가 유효한 SYN요청을 받았는지를 의미합니다. - Step 3(ACK):
마지막 단계에서, sender는 받은 ACK를 receiver에게 전송을 하면서, 신뢰성 있는 연결이 성립되었다는 사실을 sender와 receiver 양쪽에서 알 수 있고, 실제 데이터 전송이 시작되게 됩니다.
segment를 받고 나서 ACK를 보냄
ACK#3 = 3번 세그먼트 보내라
다음 세그먼트를 받고자 할 때 ACK인 건지 아니면 잘 받았다는 의미인지 확인 필요
TCP buffer의 여유공간= window size
만약 mss(maximun segment size)보다 window size가 작다면 받을 수가 없다
= TCP 버퍼에서 I/O read 스피드를 올려서 얼른 소켓으로 가져와야 한다
패킷 생성 원리
Stream 자르기- 세그먼트화 -packeet으로 encapsulation - frame화
3way handshake 시에 '연결'은 어떻게 확인할 수 있을까?
1) call을 해서
2) 응답을 받았다
로는 사실 부족하다
세그먼트 플래그 = syn, ack 등
segment 번호 +mss+정책(혼잡,흐름, 오류 제어 정책)
4way handshake 시에 연결이 유지되는 이유
tcp의 '물리적인' 연결은 깨지더라도, 일정 기간 '논리적인' 연결은 이어진다
reference
https://www.geeksforgeeks.org/tcp-flags/?ref=lbp
UDP에 대한 설명도 추가하면 좋겠지만, UDP는 흰 도화지처럼 기본 설정이 가벼워서 커스텀하기 좋고, 연결 설정에 상관없이 반응 속도가 빠르다~ 정도로 이해하자
'Computer Science > Network' 카테고리의 다른 글
맨날 헷갈리는 Origin Site Host 개념 구분하기 CORS와 CSRF 이해하기 (0) | 2022.10.17 |
---|---|
애플리케이션과 웹의 차이 Difference between Website and (Web/mobile) Application (0) | 2022.05.28 |
HTTP 완벽 가이드 목차대로 공부하기 (0) | 2022.05.08 |