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
读取