본문 바로가기
IT

이해하면 인생이 바뀌는 TCP 송/수신 원리

by 보안매크로 2023. 6. 17.
728x90

클라이언트(PC)와 서버가 TCP/IP 연결이 된 모습이다.

-3-wAY handshake방식으로 연결되어 있다.

-3Way-Handshake

송신자와 수신자간 사전에 통신 채널(세션)을 확보를 위한 연결방식

-(4Way-Handshake)

데이터 전송이 완료 된 후 통신 채널(세션)을 종료를 위한 방식

-서버(웹서버든 무슨서버든)에 Socket이 열려있어 이를통해 통신한다.

Socket - 네트워크 세계로 데이터를 내보내거나, 혹은 그 세계로부터 데이터를 받기 위한 실제적인 창구 역할을 한다.

-파일 전송시 읽는것(R) = Receive, 쓰는것(W) = Send로 본다.

-데이터 전송시 14MB를 보낸다 치면, 14MB를 일정량 만큼 쪼게서 계속 보내는 것이다. 먼저 64KB만큼 써서 보내면 64KB만큼만 먼저 읽고 그다음 데이터를 받는다.

-과정을 설명하자면 Server에서 Socket으로 데이터를 내보내기 전에, 데이터 분해(14MB -> 64KB)하고 나서. socket에서 TCP로 이동할 때 Buffer를 거친다.

Buffer - 하나의 장치에서 다른 장치로 데이터를 전송할 경우에 양자간의 데이터의 전송속도나 처리속도의 차이를 보상하여 양호하게 결합할 목적으로 사용하는 것으로, 버퍼 에어리어라고 한다.

-TCP에서 IP로 넘어갈 때, Segment로 데이터들을 자른다. 쪼게진 데이터들에 다시 각 세그먼트를 지정해서 번호를 준다는 느낌이다.

Segment - 프로그램이나 데이터를 세그먼트라는 가변 크기로 관리하는 것이다.

-Segment 하나를 박스안에 넣은게 Packet이다. Packet이 인터넷을 타고 클라이언트쪽으로 간다. Frame에 Packet을 넣어 간다.

-Socket, TCP 에 다 Buffer가 있다. frame에서 NIC, Driver를 거쳐 박스를 뜯어 Packet으로, IP를 거쳐 TCP에서는 Segment로 전달된다. 이 Segment가 TCP Buffer에 차곡차곡 쌓인다. 세그먼트가 대략 2번오면 서버에게 잘 받았다고 다시 알려줌. 이를 ACK(번호를 알려줌)라고 함. ACK를 받고나서(wait함) 다음 segment를 보냄. 이 떄문에 속도 지연이 발생함. 그래서 TCP는 속도가 느리다.

NIC - 컴퓨터와 네트워크 사이에 인터페이트 제공, 다른 장치와 네트워크 할 수 있다.

-TCP Buffer의 크기가 Window size(수신측에서 Segment를 받을 수 있는 공간)이다. 공간이 정해져 있어 ACK에 include(포함) Window Size가 얼마나 있는지를 포함해서 서버에 보낸다.

-수신측의 Window size를 송신측에서 판단해서지금 보낼 사이즈보다 크면 보내고, 작으면 Wait가 걸림.

-클라이언트 Process에서 socket에 RW(읽고 쓰기 = 받고 보내기)를 하는데 R속도가 네트워크 수신 속도보다 커야한다!! Read 속도 > Net 수신 속도

-이유는 net수신 속도가 더 크면, Buffer에 Window size가 부족해지게 된다. 그래서 TCP Buffer에서 Socket으로 빨리 올려야한다.(Read) 처리지연문제가 발생할 수 있다.

-통신할때 송신보단 수신측 오류가 훨신 많으니 신경 써주자.


 

728x90

'IT' 카테고리의 다른 글

SDK vs API vs Framework vs Library?  (0) 2023.06.18
리눅스의 구조(참조)  (0) 2023.06.18
TCP와 UDP 비교  (0) 2023.06.17
OSI 7계층  (0) 2023.06.17
허브, 스위치, 라우터, 공유기 차이  (0) 2023.06.17