Computer/Network
[네트워크] 소켓통신(TCP) 동작 원리
HONGGG
2023. 8. 9. 01:05
TCP로 서버와 클라이언트의 연동과 데이터가 전달되는 방식과 TCP가 UDP보다 느린 이유
이번 장에서는 서버와 클라이언트의 TCP 송수신 원리와 과정을 간략하게 알아보자.
주요 구성요소
서버와 소켓
- 서버는 프로세스(Process)이다.
- 소켓은 서버와 클라이언트가 연결되는 통로이다.
- 소켓의 본질은 파일(File)이며 프로토콜, 포트 번호, IP로 구성된다.
- 소켓은 TCP/IP를 추상화한 것이다.
- TCP는 Segment를 관리한다.
- IP는 Packet을 관리한다.
- 서버는 소켓에게 RWX 오퍼레이션으로 I/O를 한다.
- 소켓은 데이터를 송/수신을 하기에 RW동작만 한다.
- 소켓 통신에서는 Read/Write/Excute를 다르게 명칭한다.
- Read ⇒ Receive
- Write ⇒ Send
NIC (Network Interface Controller)
- IP 프로토콜에서 생성한 Packet을 Frame에 넣어 인터넷으로 송신한다.
2차 메모리 저장소(HDD, SDD)
- 2차 메모리 저장소(HDD, SDD)에는 파일이 들어있다.
- File system이 파일들을 관리한다.
- 저장소의 Device Driver가 File System과 통신하여 파일의 I/O를 관리한다.
서버 송신 과정
메모리 적제
- 2차 저장소에서 송신할 파일을 서버 메모리에 할당한다.
- 서버 메모리 할당시 메모리 크기는 서버 개발자가 결정한다.
- 예로 10MB의 파일을 송신해야하고 서버 버퍼 크기가 64KB로 설정되어있다.
- 10MB의 파일을 64KB 단위로 나누어 File System이 Read하여 서버 버퍼에 적제한다.
- 서버 메모리 할당시 메모리 크기는 서버 개발자가 결정한다.
TCP 프로토콜로 이전 = 분해
- 소켓에서 파일을 분해하여 패키지를 생성한다.
- TCP 프로토콜 내부에도 버퍼가 존재한다.
- 서버 버퍼에서 TCP 버퍼로 Copy가 된다.
- 위 동작을 Bufferd I/O로 명칭한다.
- 버퍼의 크기 설정, 공정 과정에 대한 자세한 설명은 다른 글에서 정리한다.
- 위 동작을 Bufferd I/O로 명칭한다.
IP 프로토콜로 이동
- TCP 버퍼 데이터를 Segment단위로 분해하여 IP로 전달한다.
- Segment로 변환 과정에서 고유 넘버를 부여한다.
- IP Packet으로 전환한다.
- Packet 후처리 과정이 있지만 따로 문서화 필요
엔드포인트
- Packet을 L2수준에서 내려올때 Frame에 입력된다.
- 인터넷을 통해 Frame을 전달한다.
- 엔드포인트에 도착까지 여러번의 Frame변화를 거친다.
클라이언트 PC
응답 확인
- 위 서버가 데이터를 보내는 과정을 통해 클라이언트가 Frame을 받는다.
디캡슐레이션 (Decapsulation)
- 디캡슐레이션을 통해 L2로 올라갈때 Frame을 제거하고 Packet확보한다.
- 확보한 Packet 속 Segment를 클라이언트 TCP 버퍼에 할당한다.
- 이때 버퍼 공간의 크기는 Window Size라고 한다.
- Window Size는 수신자(클라이언트)가 수락할 수 있는 데이터의 양이다.
- TCP 핸드셰이크 프로세스 중에 발신자와 수신자 간에 협상된다.
- 이때 버퍼 공간의 크기는 Window Size라고 한다.
- 위 과정을 어느정도 반복한다.
- 항상 그런 것은 아니지만 대략 2개정도의 Segment가 오면 중단한다.
ACK 반환
- 2번까지 데이터를 전송한다면 서버는 Wait상태로 전환된다.
- 아주 중요한 포인트이다. 클라이언트의 ACK반환을 기다린다.
- TCP의 속도 문제가 발생하는 이유이며 UDP보다 느린 이유이다.
- 2번째 Segment까지 도착한다면 ACK를 반환한다.
- ACK는 다음 전달 받을 Segment 넘버와 Window Size를 포함한다.
- 서버는 ACK를 통해 다음 사실들을 확인한다.
- 데이터 순서 확인 및 재전송 여부를 결정한다.
- Window Size로 여유공간 확인 및 전송 여부를 확인한다.
- Window Size > MSS(Maximum Segment Size) = ?
- Yes : 데이터 전송
- No : Wait
- Window Size > MSS(Maximum Segment Size) = ?
- Window Size가 부족하여 Wait가 걸리는 경우 클라이언트 소켓 버퍼에 빠르게 Read하여 여유공간을 만들어야한다.
- 위 경우의 네트워크 속도 문제는 클라이언트의 문제이다.
요약
- 서버는 프로세스이다.
- 소켓은 서버와 클라이언트가 연결되는 통로이다.
- 소켓의 본질은 파일이며 File I/O가 주된 업무이다.
- 소켓 프로그래밍은 TCP/IP가 본질이다.
- 소켓은 프로토콜, 포트, IP로 구성된다.
- 소켓은 서버와 RWX로 I/O를 한다.
- Read
- Send
- TCP는 Segment를 담당한다.
- IP는 Packet을 담당한다.
- NIC는 Frame을 담당한다.
- TCP/IP 프로토콜의 네트워크 레벨은 다음과 같다.
- L1 : 물리적인 주소로 MAC을 사용
- L2 : 통신 노드 간의 IP패킷을 전송하는 기능과 라우팅 기능을 담당
- L3 : 통신 노드 간의 연결을 제어하고, 신뢰성 있는 데이터 전송을 담당
- L4 : TCP/UDP 기반의 응용 프로그램을 구현할 때 사용
- 서버는 저장장치에서 전송할 데이터를 버퍼에 저장한다.
- TCP가 버퍼의 데이터를 Copy한다.
- TCP가 버퍼의 데이터를 Segment단위로 나눈다.
- TCP가 각 Segment에 고유 넘버를 부여한다.
- L2 레벨로 내려오며 IP에서 Segment를 패키징한다.
- NIC를 통해 IP 패킷을 Frame에 넣는다.
- Frame이 인터넷을 통해 엔드포인트로 이동하며 여러번 변화를 겪는다.
- 클라이언트가 Frame을 받는다.
- IP에서 디캡슐레이션을 통해 Packet을 확보한다.
- Packet에서 Segment를 확보하여 TCP 버퍼에 할당한다.
- 두번째 Segment를 받기까지 반복한다.
- 두번째 Segment확보 후 서버는 Wait 상태에 돌입한다.
- 두번째 Segment확보 후 클라이언트는 ACK를 반환한다.
- ACK에는 다음 Segment 고유넘버와 Window Size가 전달된다.
- 서버는 ACK를 받아 확인한다.
- 서버는 Segment 고유넘버가 순서대로 전달되는지 확인한다.
- 순서가 다르면 재전송한다.
- 서버는 Window Size가 MSS보다 작지 않은지 확인한다.
- Window Size가 작으면 Wait 상태로 돌입한다.
- 클라이언트는 항상 TCP 버퍼에서 File 버퍼로 빠르게 옮겨준다.
참고자료
[기본] 소켓(SOCKET)통신 이란?
소켓통신 소켓(SOCKET)이란?소켓(Socket)은 프로세스가 드넓은 네트워크 세계로 데이터를 내보내거나 혹은 그 세계로부터 데이터를 받기 위한 실제적인 창구 역할을 한다. 그러므로 프로세스가 데
helloworld-88.tistory.com
리눅스 - 파일 권한 rwx 의미 알아보기
linux rwx는 무슨 뜻인가요? 안녕하세요. 고코더 입니다. 리눅스를 사용하다보면 익숙한 화면이 있습니다. 앞에는 항상 알수 없는 알파벳이 보입니다. 대략 보면 rwx가 반복되는 철자 입니다. 이는
gocoder.tistory.com
TCP/IP란 무엇이며 어떤 원리로 작동하나요?
이 글을 읽고 TCP/IP 계층, 정의, TCP IP의 차이점, 데이터 보호 방법에 대해서 자세히 알아보세요.
nordvpn.com
TCP/IP 4계층(TCP/IP 4 Layer)
TCP/IP (Transmission Control Protocol / Internet Protocol)현재 수많은 프로그램들이 인터넷으로 통신하는데 있어 가장 기반이 되는 프로토콜로 실제 대다수 프로그램은 TCP와 IP로 통신하고 있다. ARPANET이 개
hahahoho5915.tistory.com