- Signal 되짚어보기
- Signal의 한계
복잡한, 혹은 변화하는 통신 방법으로는 부적합하다. 중요한 건 데이터. 그냥 메모리를 공유하면 좋겠지만 그건 불가능...
프로그램에게 가장 기본적인 입출력?
- Standard I/O: stdin, stdout, stderr
- File I/O
입력을 꼭 키보드로만 하라는 법은 없다.... 표준 입출력이란 것도 사실 미리 준비된 File Descriptor
그러면 입력/출력을 위한 file descriptor를 2개 만들면 되지 않을까?
- https://en.wikipedia.org/wiki/Pipeline_(Unix)
- 프로그램에서 이런 표현식을 쓰기도... C++ Ranges
앞서서 본 Pipe는 1:1 통신. 다수의 프로세스가 통신하려면 좀 다른 방법이 필요하지 않을까? Pipe와 같이 파일을 만들어서 통신하는 방식. 하지만 프로세스들이 이름을 통해서 접근한다는 점이 다르다.
Socket API를 이해하기 위해 앞서서 알아볼 것들...
- OSI 7 Layer: All People Seems To Need Data Processing https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%EB%84%B7_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C_%EC%8A%A4%EC%9C%84%ED%8A%B8
- 패킷 스위칭 Packet Switching
- 흐름제어 Flow Control
Q. 컴퓨터들의 통신과 사람의 전화통화는 어떤 점이 다를까?
- New 알기쉬운 TCP/IP
- https://cohesive.net/2017/09/4-things-everyone-should-know-about-network-layers.html
- RFC 1180: TCP/IP Tutorial
- Domain Name System (DNS)
- Protocol Stack
- Network Topology
- Internet Protocol (IP)
- Router
- MAC address
- Dynamic Host Configuration Protocol (DHCP)
모든 네트워크 인터페이스들은 고유 주소, MAC Address를 가지고 있다. (ROM에 쓰여있음)
- Address Resolution Protocol
arp
명령:-a
Topology 내에서 각 Machine의 식별. MAC Address를 어떻게 하면 쉽게 알아낼 수 있을까?, ARP Broadcast와 ARP Reply
Internet Protocol을 통해서 하려는 것은 Packet을 상대 Host에게 전달하는 것.
- 상대 Host Machine을 어떻게 구분할 수 있을까? 주소체계의 필요성
- 데이터를 어떻게 표현할까? 패킷 구조의 정의
- IPv4: 4 byte 주소 + Subnet mask
- IPv6: 16 byte 주소
ipconfig
/ifconfig
route
명령tracert
명령
라우팅 테이블의 구조
패킷 구조를 보기 전에 역시 용어를 살펴봐야 하는데...
- RFC 1122 Terminology Section
- 최대 전송 단위 (Maximum Transmission Unit)
- Maximum Segment Size of TCP
IP를 사용해서 Host Machine까지 패킷을 전달한 이후, 그 패킷을 프로세스에게 어떻게 전달할 것인가? 재전송이 필요한가? 부분적 유실은 어떻게 처리하는가? 이 파트를 시작할때 Flow control에 대해 설명했었는데, 그 처리를 여기서...
- Port와 Socket의 관계
netstat
명령
- 혼잡 방지 Congestion Control of TCP
- 3-Way Handshake
- ACK, S-ACK
모든 통신이 연결을 필요로 하는 것은 아니다... Multicast를 지원할 필요성도 존재.
- Unicast, Multicast, Broadcast의 차이점?
- 위키피디아: 사용자 데이터그램 프로토콜
- RFC 768: User Datagram Protocol
- RFC 8085: UDP 사용 가이드