本文共 3167 字,大约阅读时间需要 10 分钟。
区分各类地址的最简单方法是:看它的第一个十进制整数,
IP地址主要分三类:单播地址(目的端口为单个主机),广播地址(目的端口为给定网络上的所有主机),多播地址(目的端口为同一组内的所有主机)
2.域名系统
DNS是一个分布式的数据库,由他来提供IP地址和主机名之间的映射信息
3.封装
4.TCP/IP协议层
ICMP的一些介绍
由于TCP、UDP、ICMP、IGMP都向IP传送数据,在IP首部加入某种标志,以表明数据属于哪一层。
网络接口要发送和接收IP、ARP、RARP数据,需要在以太网帧sh首部加入某种标识,来表明生成数据的网络层协议。
(1)应用层:一个应用就是一个用户进程,应用层和传输层之间的接口由端口号和套接字(Socket)所定义,应用层协议:FTP(文件传输协议),Telnet
(2)传输层:
(3)网络层:IP不提供可靠,流控、错误恢复。而提供了路由功能。
(4)网络接口层:又称链路层(Link Layer)或者数据链路层(Data-link Layer),是实际网络接口的硬件。既可提供可靠,又可提供不可靠传输,既是面向消息的传输,也可以是面向流的传输。
4.TCP/IP应用
采用客户/服务器(Client/Server)交互模型,应用程序通常使用客户/fu'w服务器模型进行通信
应用程序包括fu'w服务器部分和客户部分,这两部分既可以在相同系统上运行,也可以在不同的系统上运行。
大多数服务器在一个熟知(well-known)端口上等待请求,因此,客户必须把请求发送到哪个端口(进而才知道哪个应用)。客户通常使用一个称为临时端口(Ephemeral Port)的任意端口进行通信
5.三次握手协议
TCP三次握手连接及四次挥手释放具体的内容可以参考:(解释的非常好了)
每一次TCP连接都需要三个阶段:连接建立、数据传送、以及连接释放
三次握手的连接简历过程中:
1.client发出段1:SYN位、序号、mss
SYN位表⽰连接请求(这就是为啥要发送这么一个SYN位的原因),SYN包是TCP连接的第一个包,是非常小的一种数据包。SYN攻击包括大量此类的包。
序号是1000,这个序号在⽹络通讯中⽤作临时的地址(这就是发送序号的作用),每发⼀个数据字节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺序。规定SYN位和FIN位也要占⼀个序号,因此下次再发送应该⽤序号1001
mss表⽰最⼤段尺⼨,如果⼀个段太⼤,封装成帧后超过了链路层的最⼤帧长度,就必须在IP 层分⽚。
2.服务器发出段2:SYN位、序号、mss,ACK位
置ACK位表⽰确认。
确认序号是1001表示:我接收到序号1000及其以前所有的段,请你下次发送序号为1001的段。
应答了客户端的连接请求,同时也给客户端发出⼀个连接请求,同时声明最⼤尺⼨为1024(指的是mss)。
3.客户端发出段3
服务器的连接请求进⾏应答,确认序号是8001
为什么要三次握手,而不是二次握手呢?
采用三次握手的目的是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
数据传输的过程:
在数据传输过程中,ACK和确认序号是⾮常重要的。应⽤程序交给TCP协议发送的数据会暂存在TCP层的发送缓冲区中,发出数据包给对⽅之后,只有收到对⽅(eg:server)应答的ACK段才知道该数据包确实发到了对⽅,可以从发送缓冲区中释放掉了,如果因为⽹络故障丢失了数据包或者丢失了对⽅发回ACK段,经过等待超时后TCP协议⾃动将发送缓冲区中的数据包重发
具体的话,序号在数据传输中起作用的?
看上面的三次握手已经解释的很清楚了,下面的作为补充
1. 客户端发出段4,包含从序号1001开始的20个字节数据。
2. 服务器发出段5,确认序号为1021,对序号为1001-1020的数据表⽰确认收到,同时请求发送序号1021开始的数据,服务器在应答的同时也向客户端发送从序号8001开始的10个字节数 据,这称为piggyback
3. 客户端发出段6,对服务器发来的序号为8001-8010的数据表⽰确认收到,请求发送序号8011开始的数据。
关闭连接的过程(四次挥手)
1. 客户端发出段7,FIN位表⽰关闭连接的请求。
2. 服务器发出段8,应答客户端的关闭连接请求。
3. 服务器发出段9,其中也包含FIN位,向客户端发送关闭连接请求。
4. 客户端发出段10,应答服务器的关闭连接请求。
为什么要四次挥手,而不是三次挥手呢?
建⽴连接的过程是三⽅握⼿需要3个段,⽽关闭连接通常需要4个段,并且在关闭时,服务器对客户端关闭连接请求的应答和服务器发出的关闭连接请求通常不合并在⼀个段中。
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。可以理解为断开连接是“两个人”的事儿。由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动。因此一个TCP连接在只收到一个FIN后仍能发送数据(一个方向连接被关闭了,另一个方向还能用)。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
这种连接半关闭的情况是,客户端发出带有FIN位的报文表⽰关闭连接的请求,当服务器收到客户端的FIN报文通知时,它仅仅表示客户端没有数据发送给服务器了,但并不能说明此时服务器已经将所有的数据都发送给客户端了,所以服务器可能未必会马上会关闭SOCKET,而是只进行对客户端请求关闭连接的确认应答,关掉客户端方向的一条线路。然后在服务器可能还需要发送一些数据给客户端之后,服务器再发送关闭连接的请求给客户端表示现在请求完全关闭连接。所以服务器这里的ACK报文和FIN报文多数情况下都是分开发送的。
客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。
四次挥手中主动断开链接的一方为什么要进入TIME_WAIT状态 ?
1. 若在第四次挥手时发出ACK确认应答时,由于网络原因导致ACK确认应答的报文没有被被动方收到,等到2MSL从而触发被动方重新发送FIN包,因而主动关闭连接的一方需要停留在TIME_WAIT等待状态以处理对方重新发送的FIN数据包。否则它会回应一个RST数据包给被动关闭连接的一方,引起被动方关闭流程错乱。
2.在TIME_WAIT状态下,是不允许应用程序在当前ip和端口上与之前通信的client(这个client的ip和端口号不变)建立一个新的连接的。这样就能避免新连接收到之前的连接(ip和端口一致的连接)残存在网络中的数据包了。这也是TIME_WAIT状态的等待时间被设置为2MSL的原因,以确保当前网络两个连接方向上的尚未接收到的TCP报文已经全部消失 。
6.TCP,UDP协议的选择
(1)数据可靠性:验证,密码字段用TCP
(2)应用的实时性:TCP会有较大延时,VOIP、视频监控用UDP
(3)网络可靠性:广域网用TCP,局域网用UDP来减少负荷
7.端口号
两种
(1)物理意义端口,j交换机路由器等(2)TCP/IP协议du端口,范围:0——65535,常用应用程序端口范围:0——1023,http:80,ftp:21,ssh:22;还有一类是自己定义的,通常>1024