1. Server 송신 과정
ex) 메모리는 64KB , 실제 데이터는 1.4 mb 일 때 64KB씩 잘라서 프로세스가 진행
1. 64KB씩 분해해서 소켓에 작성하는데 프로세스 메모리에 적재된 데이터를 TCP 메모리 (버퍼)에 적재함
서버에서는 소켓을 가지게 됨
- 소켓은 파일
- 서버는 프로세스
프로세스가 파일(소켓) 에다가 RW (읽고 쓰기)
- 읽기 : recieve
- 쓰다 : send
서버 프로세스가 소켓에 I.O를 한다.
HDD/SDD 등 2차 메모리 안에 파일이 들어있음
파일 시스템(ex:a.jpeg) 으로 관리됨
파일 시스템은 드라이버를 통해 메모리에 접근
프로세스별로 메모리를 할당 받는데 해당 사이즈는 개발자가 결정
2. 해당 버퍼를 IP Layer에서 세그먼트 단위로 분해함
3. 세그먼트 번호를 부여함
4. 네트워크 L2 Layer에서 송신 처리를 할때 프레임으로 세그먼트를 감싸서 전송
5. 프레임은 중간 단계마다 네트워크 상태에 따라서 변경 될수도 있음
2. Client 수신과정
1. 클라이언트가 NIC 해당 데이터가 저장된 프레임을 수신 받음
- 클라이언트의 소켓의 파일 버퍼가 존재함
- 클라이언트의 TCP 버퍼도 존재함
2. 프레임에서 TCP/IP(커널 수준)으로 올라가면서 프레임 속의 세그먼트를 TCP 버퍼에 적재 후에 세그먼트 번호를 다시 답변해줌(ACK)
- ACK의 세그먼트 번호는 다음 받을 세그먼트의 번호
- 서버는 클라이언트의 ACK을 기다림(wait) <= TCP 속도 저하의 원인
- 클라이언트 TCP버퍼의 여유공간 사이즈는 window size라고 부름
- 현재 window size(Maximum segment size)를 ACK에 적어서 같이 보냄
서버는 Mss를 확인하고 세그먼트를 보낼 만한 공간이 없다고 판단하면 wait 상태로 변함
클라이언트는 일단 데이터를 TCP 버퍼에서 소켓 버퍼로 빨리 올려야 됨