Chapter 1 Socket101
networks, packets, and protocols
网络是由通过通信信道(communication channel)连接的电脑组成的,我们称这些电脑为host和router(or gateway)
host是运行实际应用程序的电脑,也就是网络中用户使用的电脑。
router是在信道间转接或传递信息的电脑。使用router是由于直接将要通信的host电脑进行连接并不切合实际
communication channel则是将一组有序字节从一台host传到另一台的方式,可以是有线(eg. Ethernet),或无线(eg. WiFi)
网络间传递的有序字节数据又被称为packet,packet中除了包含用户想传递的数据外还有一些控制信息,
比如目标位置。
protocol则是关于packet结构定义及相关数据如何解析的一些协议。
通常不同的protocol用于解决不同的实际问题。TCP/IP则是一组相关协议的总称,又被称为协议族
其中的主要协议有:IP(Internet Protocol), TCP(Transmission Control Protocol), UDP(User Datagram Protocol)
通常由host的操作系统提供TCP, UDP服务,然后host上的程序通过Socket API调用这些服务实现通信
而IP则负责将实际的packet从一台host传到另一台host,为了实现传递,packet中必须包含目标的address。
IP只负责传递packet,但有可能发生丢包,错序,重复等情况。
IP只负责host to host的packet传递,所以在其基础上还需使用transport layer的协议,即TCP或UDP等。
TCP和UDP通过使用port number来区分同一host上的不同应用连接,从而实现从一个程序与另一个程序的通信
TCP会检测IP传输中出现的丢包等错误并尝试修复,而UDP则不做任何处理
address
TCP/IP中通信地址由两部分组成,IP使用的internet address,和传输层(TCP or UDP)使用的port number
IP address
IP address由二进制数组成,IPv4由4 bytes, 32 bits组成,而IPv6由16 bytes, 128 bits组成。
为了人类辨认,IPv4通常写成4个由.分隔的十进制数,每个数包含8 bits的地址,所以每个数的取值范围为0-255
IPv6则由8个以:分隔的十六进制数组成。
一台host可以同时拥有多个IP address,且可以同时用于IPv4和IPv6
port number
port number由16 bits二进制数组成,通常用十进制表示(1-65535, 0为保留端口)
special address
- loopback
IPv4(127.0.0.1),IPv6(::1) - private
IPv4中10,192.168开头,以及172开头且第二个数字在16~31之间的地址 - link-local
IPv4中169.254开头的地址 - multicast
IPv4中第一个数字在224~239之间的地址
Name
通过映射关系将hostname与IP address进行配对,
然后通过DNS(Domain Name System)或local configuration database进行解析
client and server
client发起通信连接请求,所以client端必须知道server端的address,而server端不用知道client端。
一旦通信连接建立后,client和server则没有本质的区别了。
通常知道网络中的server的IP address比较简单(通常是知道domain然后让DNS解析),但却无法知道port number。
通常不同协议有不同的默认端口,当我们省略时则可以会自动使用这些端口。
Internet Assigned Number Authority
组织会管理这些默认端口的使用
socket
与可以用来读写文件的文件句柄类似,socket用于读写在不同host间传递的数据。
一台host上写入socket的数据可以被另一台host读取

