计算机网络,分组报文和协议
计算机网络由一组通过通信信道相互连接的机器组成。就是主机和路由器。
主机,就是运行应用程序的计算机, 主要就是运行的网络连接应用程序。
路由器,将信息从一个通信信道传递或转发到另一个信道。
通信信道,是将字节序从一个主机传输到另一个主机的一种手段。有线,无线等等
分组报文(packet),一组报文包括了网络用来完成工作的控制信息,有时还包括一些用户数据。首部包含了诸如目的地址和源地址等重要控制信息。
协议(protocol),指出了传输内容的含义。http, ftp等。 自己也可以定义。
关于地址
每一个互联网地址代表了一台主机与底层的通道信道的连接,也就是一个网络接口(network interface)
IPv4地址,被表示为一组4个十进制数,4个字节,0-255. 每个数字之间圆点隔开。
IPv6地址,16个字节由8组十六进制数组成。每一组两个字节。每组开头的0可以省略。只包含0的连续组可以全部省略。
2000:fdb8:0000:0000:0001:00ab:853c:36a1可以简写成2000:fdb8:::1:ab:853c:36a1
端口号,是一组16位的无符号二进制数,也就是(2^16)的值,所以每个端口的范围是1~65535(0被保留),http80端口,ftp21端口等等,都是被保留的
特殊地址:
- 回环地址(loopback interface),它的功能只是简单地将发送给它的报文直接回发给发送者。IPv4是127.*.*.*,比如127.0.0.1, IPv6是0:0:0:0:0:0:0:1
- 私有用途地址,不属于公共网络的一部分,也就是局域网地址系列。他们包括IPv4所有以10或192.168开头的地址。以及第一个数是172,第二个数在16~31的地址。IPv6没有保留地址,可能是IPv4足够应对局域网的地址数量了。
- 网络地址转换器(Network Address Translation, 简称NAT),它的功能就是把局域网地址转换成公网地址。private address:port pairs ----> public address, port pairs
- 本地链接地址,只能用来在连接到同一网络的主机之间进行通信, 路由器不会转发这类地址信息。 IPv4以169.254开头。在IPv6中, 前16位由FE8开头的地址是本地链接地址。
- 多播地址,可以与任意数量的目的地址关联。IPv4中格式是,第一个数字在224~239之间。 IPv6中是,FF开始。
关于名字
- DNS域名解析服务器, 是一个分布式数据库,查询域名和实际地址的关系
什么是套接字
是一种抽象层,应用程序通过它来发送和接受数据。就像打开文件句柄一样的读写。
不同类型的socket与不同类型的底层协议族以及同一协议族的不同协议栈关联。 TCP/IP只是其中一种协议族。
TCP:作为流套接字端对端协议,底层使用IP协议, 提供一个可信赖的字节流服务。
UDP:作为数据报套接字, 底层同样使用IP协议,提供一个“尽力而为”(best-effort)的数据报服务,最长可以发送65500字节。
其他协议族也支持流套接字和数据报套接字。
一个TCP/IP套接字由一个互联网地址,一个端对端协议(TCP或者UDP协议)以及一个端口号唯一确定。所以服务端就是通过这一点来区分同一台主机发出来的不同socket连接。
这里再指出一点,客户端的端口号,虽然在代码里不需要指明,但是系统会分配。客户端的端口号就是出端口号,而服务端代码中指明的服务端的监听端口号就是入端口号。