일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Cell Shader
- 작업 집합
- Specular
- Windows Build
- Three(Two) Tone Shading
- ColorGradingLutPass
- working set
- 게임 수학
- Toon Shader
- C언어
- ASW(Application SpaceWarp)
- VR
- 개인 바이트
- OculusMotionVectorPass
- URP
- Rim Light
- Cartoon Rendering
- 프로그래밍 기초
- URP로 변경
- Cell Look
- 가상 바이트
- 벡터
- Virtual Byte
- 3d
- AppSW
- Private Bytes
- 메모리 누수
- Today
- Total
WinCNT
네트워크로 데이터를 송신하는 과정 본문
성공과 실패를 결정하는 1%의 네트워크 원리의 2장의 일부를 참고해서 정리한 글입니다
1. 소켓을 작성한다
프로토콜 스택: OS에 내장된 네트워크 제어용 소프트웨어
네트워크 통신을 하기 위한 요청 준비라고 생각하자
프로토콜 스택은 OS가 관리한다
주소 - 내 컴퓨터(LAN 카드 - NIC)
프로세스 - 패킷을 송수신 - 포트 번호로 패킷을 주고 받음
netstat -ano
네트워크 스테이트
현재 생성된 모든 소켓을 보여준다
nslookup
도메인 네임에 매핑된 IP 주소를 알려준다
tracert
트레이스 라우트
특정사이트에 접속하기 까지의 IP 경로 추적
ICMP(Internet Control Message Protocol)
소켓의 실체는 통신 제어용 제어 정보
프로토콜 스택은 내부에 제어 정보를 기록하는 메모리 영역을 가지고 있다
(통신 상대의 IP 주소, 포트 번호, 통신 동작 등등)
소켓은 개념적인 것이어서 실체가 없으므로
굳이 말하자면 이 제어 정보가 소켓의 실체라고 할 수 있다
또는 제어 정보를 기록한 메모리 영역이 소켓의 실체라고 생각할 수도 있다
프로토콜 스택은 이 제어 정보를 참조하면서 동작한다
gethostbyname()은 API, 도메인 이름에서 IP 주소를 얻어온다
2. 서버에 접속한다
소켓을 만들 때 TCP/UDP인지를 지정한다
TCP인 경우
Connect
어떤 패킷을 주고 받음 - 상대편에게 연결할 것이라 알림
Close - 연결 끊기
어떤 패킷을 주고 받음 - 상대편에게 연결 끊을 거라고 알림
Listen
Accept 연결, 1-1로 통신 준비
송수신
IP와 이너넷의 패킷 송수신 동작
TCP에서 연결이 되어 있으면 패킷을 송수신한다
프로토콜 스택과 LAN 어댑터가 연대하여
작은 조각으로 분할한 데이터를 패킷 형태로 묶고
그것을 전기나 빛 신호로 변환하여 케이블에 송출한다
UDP인 경우
클라이언트 입장에서는 Connect할 때마다 주소를 설정해야 한다
sendto(주소...)
서버 입장에서는 어떤 클라이언트가 보냈는지 모른다
recvFrom(누가 보냈나)
TCP 헤더의 포맷
3. 데이터를 송수신한다
프로토콜 스택은 받은 데이터의 내용에 무엇이 쓰여있는지 알지 못 한다
write를 호출할 때 송신 데이터의 길이를 지정하지만 프로토콜 스택은 해당 길이만큼만
바이너리 데이터가 1바이트씩 차례로 나열되어 있다고 인식할 뿐이다
프로토콜 스택은 받은 데이터를 곧바로 송신하는 것이 아니라
일단 자체의 내부에 있는 송신용 버퍼 메모리 영역에 저장하고,
어플리케이션이 데이터를 건네주기를 기다린다
MTU와 MSS
MTU(Maximum Transmission Unit)
패킷 한 개로 운반할 수 있는 디지털 데이터의 최대 길이
이더넷에서는 보통 1500바이트
MSS(Maximum Segment Size)
헤더를 제외하고 한 개의 패킷이 운반할 수 있는 TCP 데이터의 최대 길이
스트림 데이터
TCP의 경우
보낼 데이터를 MSS 단위로 자른 뒤에 보내고, 수신자의 recv소켓 버퍼에 복구한다
HTTP는 TCP의 상위 계층이기 때문에 TCP 기반으로 움직힌다
SSS
'게임 프로그래밍(학습 내용 정리) > 네트워크 프로그래밍' 카테고리의 다른 글
소켓과 포트, Stateless와 Stateful (0) | 2022.05.09 |
---|---|
TCP/IP 계층 구조 (0) | 2022.05.02 |
UDP vs TCP and Socket (0) | 2022.04.25 |
Socket Programming in C/C++ (0) | 2022.04.18 |
컴퓨터 네트워크의 구성 요소 3가지 (0) | 2022.04.11 |