Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- JanusWebRTC
- 코루틴 빌더
- addhooks
- 오블완
- tolerated
- 코루틴 컨텍스트
- Spring Batch
- preemption #
- 달인막창
- VARCHAR (1)
- python
- 개성국밥
- JanusGateway
- mp4fpsmod
- terminal
- JanusWebRTCGateway
- 티스토리챌린지
- pytest
- taint
- 깡돼후
- PersistenceContext
- 겨울 부산
- 자원부족
- PytestPluginManager
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- vfr video
- JanusWebRTCServer
- Value too long for column
- table not found
- kotlin
Archives
너와 나의 스토리
[Computer Network] 프로토콜 스택 / Socket 통신 본문
반응형
프로토콜 스택
- 프로토콜 스택은 내부에 제어 정보를 기록하는 메모리 영역을 가지고 있으며, 여기에 통신 동작을 제어하기 위한 제어 정보를 기록한다.
- 대표적인 정보: 통신 상대의 IP 주소&포트 번호, 통신 동작의 진행 상태
- 이러한 제어 정보를 기록한 메모리 영역이 소켓의 실체라고 생각해도 좋다.
- 프로토콜 스택: TCP vs UDP
- DNS 서버는 UDP 프로토콜을 사용하여 데이터를 송수신하고
- 웹 서버는 TCP 프로토콜을 이용해 데이터를 송수신한다.
- Socket programming with UDP and TCP
TCP 프로토콜을 이용하여 메시지를 송신하는 동작 4단계
- 소켓을 생성
- 서버에 접속
- 데이터를 송/수신
- 서버에서 연결을 끊어 소켓을 말소
- 그 후
- IP와 이더넷의 패킷 송수신 동작
- UDP 프로토콜을 이용한 송수신 동작
1. 소켓 생성
- 소캣 생성
- 소켓 한 개 분량의 메로리 영역 확보
- 소켓이 아직 송수신 동작이 시작되지 않은 초기상태임을 나타내는 제어 정보를 메모리 영역에 기록
- 소켓이 만들어지면 소켓을 나타내는 디스크립터를 애플리케이션에 알려줌
- 디스크립터: 프로토콜 스택의 내부에 있는 다수의 소켓 중 어느 것을 가리키는지 나타냄
2. 서버측 소켓에 접속
- 소켓을 만든 후, 애플리케이션(브라우저)는 connect를 호출해 서버측 소켓에 접속합니다.
- 소켓은 이더넷이나 통신 회선처럼 케이블로 연결되는 것이 아니다.
- 그러므로 IP 주소, 포트 번호를 프로토콜 스택에 알리는 동작이 필요하다.
- 브라우저는 URL을 바탕으로 서버의 IP 주소를 조사하고, 포트 번호는 80번을 사용하도록 규칙으로 정해져 있다.
- 이것이 접속 동작의 한 가지 역할이다.
- 그러므로 IP 주소, 포트 번호를 프로토콜 스택에 알리는 동작이 필요하다.
- 서버측에도 소켓이 만들어져있다.
- 클라이언트에서 자신의 IP 주소와 포트번호를 서버측에 전달해 데이터 송수신 요청을 한다.
- 이를 통해 서버측의 프로토콜 스택도 클라이언트의 정보를 가질 수 있게 된다.
3. 데이터 송수신
- 송/수신처의 포트 번호 각각과 스퀀스 번호 등의 정보를 가지는 TCP 헤더를 만듭니다.
- 이 헤더를 IP 담당 부분에 건네주어 송신합니다.
- 그러면 IP 담당 부분이 이것을 받아 TCP 담당 부분에 건네줍니다.
- 이후 서버측 TCP 담당 부분이 tcp 헤더를 조사하여 접속을 기다리는 해당 소켓을 발견하고, 여기에 필요한 정보를 기록합니다.
- 그리고 접속 동작이 성공했다고 ACK 비트를 보냅니다.
- 프로토콜 스택은 받은 데이터를 곧바로 송신하는 것이 아니라 일단 자체의 내부에 있는 송신용 버퍼 메모리 영역에 저장합니다.
- 어느 정도까지 저장한 후 패킷 단위로 나눠서 데이터를 송신합니다.
- 좀 더 자세한 내용은 이 곳을 참고해 주세요.
4. 연결 끊기
- 애플리케이션이 송신해야 하는 데이터를 전부 송신 완료한 경우 연결 끊기 단계에 들어간다.
- 좀 더 자세한 내용은 이 곳을 참고해 주세요.
반응형
'Computer Networks > 이론' 카테고리의 다른 글
[CH.5] Link Layer - MPLS / a day in the life of a web request (2) | 2019.12.08 |
---|---|
[CH.5] Link Layer - LANs(addressing, ARP, Ethernet, switches, VLANs) (0) | 2019.12.04 |
[CH.5] Link Layer - services, error detection/correction, multiple access protocols (0) | 2019.12.03 |
[CH.4] Routing algorithms / Routing in the Internet (0) | 2019.11.26 |
[CH.4] Network Layer - ICMP, IPv6 (0) | 2019.11.26 |
Comments