一、TCP/IP是当前使用最广泛的因特网体系结构,它是一个四层协议系统。
每一层负责不同的功能:
①应用层:负责处理特定的应用程序细节;
②运输层:为两台主机上的应用程序提供端到端的通信;
③网络层:处理分组在网络中的活动如分组的选路;
④数据链路层:也叫网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。
TCP/IP协议的工作流程:(应用层传输文件采用文件传输协议FTP)
①在目的主机上,应用层将一串数据流传送给运输层;
②运输层将数据流截成分组,并加上TCP报头形成TCP段报文,送交网络层;
③在网络层上给TCP段报文加上源、目的主机的IP报头,生成一个IP数据包,并发送给链路层;
④链路层在其MAC帧的数据部分装上IP数据包,再加上源、目的主机的MAC地址和帧头,并根据其目的MAC地址,将MAC帧发送给目的主机或IP路由器;
⑤在目的主机上,链路层将MAC帧的帧头去掉,并将IP数据包送交网络层;
⑥网络层检查IP报头,如果报头校验与计算机不一样,则丢弃IP数据包;若校验一样,则去掉IP报头,将TCP段送给运输层;
⑦运输层检查顺序号,判断是否是正确的TCP分组,然后检查TCP报头数据,若正确,则向源主机发送确认信息;若不正确或丢弃,则向源主机要求重发;
⑧在目的主机,传输层去掉TCP报头,将排好顺序的分组组成应用数据流发送给应用程序,这样目的主机接收到来自源主机的字节流就像直接接收来自源主机的字节流一样。
位码即TCP标志位6种:SYN建立连接的标志位,ACK确认位,PSH传送,FIN结束关闭连接,RST重置,URG紧急;seq起始序号,ack确认号;
第一次握手:TCP客户机进程首先向
TCP服务机进程发送一个TCP报文段,其报文段首部中的标志位SYN=1(标志),起始序号seq=x,该报文段称为SYN报文段,它封装在一个IP数据包中发送给服务器;
第二次握手:TCP
SYN报文段到达服务机后,SYN和ACK均为1,确认号ack=x+1,服务机令自己的起始序号seq=y,此时称为SYNACK报文段发送给客户机;
第三次握手:收到SYNACK报文后,向服务机发送第三个报文段,对服务机允许连接的报文段进行确认,该报文段确认号ack=y+1,起始序号seq=x+1,发送完毕后,客户机和服务机都进入ESTABLISHED状态,完成三次握手,开始传送数据。
四次分手:
第一次分手:客户端发送一个FIN,用来关闭客户A到服务器B的数据传送,此后客户端进入FIN-WAIT-1状态,这个状态就表示socket想主动关闭连接,向对方发送FIN报文;
第二次分手:服务器收到FIN报文,它返回一个确认报文段(ACK=1),确认号seq为收到的序号加1,此时通知应用进程对方关闭连接,B还可以发送数据,A可以发送确认但不能发送数据,A收到确认报文后,由
FIN-WAIT-1变为FIN-WAIT-2;
第三次分手:服务器关闭与客户端的连接,发送一个FIN给客户端报文,服务器端等待客户端做最后的确认,处于LAST-ACK状态;
第四次分手:客户端发送ACK报文确认,确认号seq为收到的序号加1,发送完成后处于TIME-WAIT状态,再等待2MSL(可能因为超时服务器未收到ACK报文,无法保证最后发送的ACK报文一定会被对方收到,所以用来重发可能丢失的ACK报文)后即可回到CLOSED状态。
问题:建立连接协议时是三次握手而关闭连接时是四次分手:因为服务器端LISTEN状态下收到来自客户端的连接请求后,它可以把ACK和SYN(ACK应答确认作用,SYN同步作用)放在一个报文里发送;但当关闭的时候,客户端发送FIN关闭请求,仅仅表示客户端没有数据发送,而服务端未必没有数据发送,所以服务端会先发送数据给对方,最后才发送FIN报文表示同意关闭连接,所以这里的ACK报文和FIN报文是分开发送的。
TCP和UDP的区别:
TCP提供的是面向连接的、可靠地数据连接传输,在收发数据时,必须和对方建立可靠的连接,而UDP提供的是非面向连接的、不可靠的数据流传输,当它想传达时就简单的去抓取来自应用程序的数据,并尽可能快地把它扔到网络上,由于传输数据不建立连接,因此也就不需要维护连接状态,因此一台服务机可同时向多个客户机传输相同的消息。简单的说,TCP注重数据安全,而UDP数据传输快,但安全性一般。
三、ARP协议
ARP(Address
Resolution Protocol)即地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议,存在于网络层。
ARP的工作原理:
①
首先,每台主机都会在自己的ARP高速缓冲区(ARP cache)中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系;
②
当源主机需要将一个数据包发送到目的主机时,会首先检查自己的ARP列表中是否存在该IP地址对应的MAC地址,如果有,就使用此MAC地址;若没有,主机就先判断目的IP是否与自己在同一个网段(主机IP与子网掩码进行“与”操作),如果在一个网段,就向本地网络中的所有主机发起一个ARP请求的广播包,本地网络中的主机接收到ARP请求后查询此目的主机对应的MAC地址;如果目的主机在一个远程网络上,那么就通过路由器等路由设备转发此ARP请求到远程网络中的广播,此ARP请求数据包里包括源主机的IP地址、MAC地址、以及目的主机的IP地址;
③源主机和目的主机在一个网络内的情况下,网络中的所有主机收到这个ARP请求后,会检查数据包中目的IP和自己的IP是否一致,如果不一致就丢弃,但该主机仍然会检查自己的ARP高速缓存;若相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,然后给源主机发送一个ARP响应数据包,告诉它需要查找的MAC地址;
如果源主机和目的主机不在一个网络内,ARP请求将由路由器转发至其他网络,如果能找到目的主机,就将此路由器的MAC地址当做目的主机的网络地址转发给源主机,以后源主机与目的主机之间的信息交换都经过此路由器,这个路由器就被称作ARP代理;如果没有找到目的主机,在ARP高速缓存中会存在一条不完整的表项记录;
④源主机收到ARP响应包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,本机缓存是有生存期的,生存期结束后,将再次重复上面的过程,之后利用此信息进行数据的传输。