天津网站制作公司哪家好,网站安全检测软件,建设银行插u盾网站上不去,wordpress指定分类主动推送百度原文#xff1a;http://hi.baidu.com/wuguoyana/blog/item/38c04d3bcf047ce43a87ce55.html 首先TCP和IP是两种不同的协议#xff0c;它们来七层网络模型中分别在不同的层次#xff0c;IP协议是网络层的协议#xff0c;TCP是更高一层的传输层的协议#xff0c;TCP是建立在I…原文http://hi.baidu.com/wuguoyana/blog/item/38c04d3bcf047ce43a87ce55.html 首先TCP和IP是两种不同的协议它们来七层网络模型中分别在不同的层次IP协议是网络层的协议TCP是更高一层的传输层的协议TCP是建立在IP协议之上的所以一般把TCP和IP连在一起说TCP/IP协议。 Windows系统的TCP协议栈的数据包默认是1460字节大小如果一次传输的数据大于这个长度会把分割成几个长度都不大于1460字节的TCP数据包每个数据包都会被赋予一个sequnce number相当于每个数据包的顺序号凭这个接收端可以知道数据包的前后顺序 之后TCP的数据包再被包裹上一层IP的数据的头形成IP数据包在网上传输其实最后还要包一层以太网数据包网络上最终传输的都是以太网数据包。 IP数据包到了目的地后接收端首先把IP数据包的包头去掉取出TCP的包。接收端每收到一个TCP的数据包都需要返回给发送端一个ACK的数据包告诉发送端已接到此数据包如果接收端在一定的时间内没有收到某个数据包的ACK响应会再次发送这个数据包这样就保证了数据都能被接收端接收到因特网上丢数据包是很正常的事如果没有数据包重发机制很难保证发送的数据都能被接收端完整的收到。 每个TCP数据包也是由包头和实际数据组成包头包含如下主要内容 l Source port2字节 发送端的端口号 l Destination port2字节 接收端的端口号 TCP包头中只包含双方的端口号双方的IP地址在IP包的包头所以在TCP数据包的包头中没有IP地址。 l Sequence number4字节 数据的顺序号表示当前数据包中的数据起始顺序号比如前一个数据包的SEQ为十六进制的df d5 aa 3d数据包的实际数据长度为16字节那么下一个数据包的SEQ就要在前一个数据包的SEQ基础上加上16为df d5 aa 4d l Acknowledgement number4字节 接收到对方的某个数据包后的回应顺序号。如果接收到了对方主动发送来的某个数据包必须要返回对方一个ACK回应数据包数据包的头部的Acknowledgement number部分根据对方发送数据的SEQ和实际数据长度返回SEQ 实际数据长度表示已经接收到这个数据包。对方收到这个回应根据数值计算后知道这个数据包已经被对方接收。如果接收不到ACK的回应就意味着这个数据包已经在网上被丢失需要重新发送此数据包。 l Header length1字节 表示TCP数据包的包头长度整个TCP数据包的长度减包头长度就能得到TCP数据包的实际传送的数据长度。 l Flags1字节 标志字节每一位都是一个标志以下是几个主要标志 ACK–表示数据包是个ACK回应数据包表示接收到了对方的某个数据包具体哪个包由包头的Acknowledgement number部分指示。 PSH–表示这是个有实际数据的包。 SYN–表示这是个建立连接的数据包通讯双方要通讯总是由客户端先发送SYN数据包到服务端以建立TCP的连接。 FIN–表示通讯结束拆除连接的数据包。 下面描述一次TCP传送数据的完整过程以一个客户端向服务端发送一些数据为例。 Figure 1一次完整的TCP通讯的过程 1、建立连接 TCP是面向连接的协议客户端和服务端要通讯就必须先建立一个连接。首先通讯双方都有地址就是IP地址加端口号IP:Port标识通讯的每一端客户端的IP:Port跟服务器IP:Port之间就构成一个socket套接字。所谓建立连接就是在客户端的IP:Port跟服务器IP:Port之间建立一个通道初始化一些通讯的基础设置以便以后的数据通讯的正常进行。 1.1. 客户端发送SYN 总是客户端发起连接首先客户端发送SYN数据包到服务端以建立TCP连接。 SYN数据包只有TCP包头没有实际数据。 Flags标志字节的SYN位置位表示是SYN数据包。 Sequence number由客户端随机生成一个4字节的数据作为本次连接通讯客户端数据的起始顺序号以后客户端发往服务端的数据包的Sequence number都在此基础上加上每次传送的实际数据长度依次相加递增这样根据每个数据包的Sequence number就能判断出数据包的前后顺序以便接收方根据数据包的顺序拼接数据包。 1.2. 服务端回应ACK、SYN 服务端收到客户端的SYN后首先要发送一个ACK数据包给客户端表示收到了这个数据包。 数据包的Flags标志字节的ACK置位表示是ACK回应数据包。 Acknowledgement number设置为接收到的数据包的SEQ 数据包实际长度因为接收到的SYN的实际数据长度为0但是TCP协议认为实际长度为0的主动发送的数据长度为1SYN是客户端主动发送的数据包所以服务端把Acknowledgement number设置为接收到的数据包的SEQ 1。 TCP通讯可以是双向的一旦建立了连接服务端也可以向客户端发送数据。 所以服务端也会向客户端发送一个SYN包数据包的Flags标志字节的SYN置位表示是SYN数据包同时随机生成一个4字节的数据作为本次连接通讯服务端数据的起始顺序号Sequence number。 实际中服务端把这两个数据包合并为一个数据包SYN和ACK都是置位Sequence number和Acknowledgement number也同时设置作为一个数据包发送回客户端。 1.3. 客户端回应ACK 客户端收到服务端的SYN数据包后需要回应一个ACK数据包表示接收到此数据包。同样ACK数据包的Acknowledgement number设置为接收到的数据包的SEQ 1SYN、ACK数据包的实际数据长度也是0。 2、相互收发数据 通讯双方建立了连接后就可以相互进行数据包的传送。 发送数据的一端把数据包的Flags标准字节的PSH置位表示是有实际数据的数据包。 Sequence number置为前一次的数据包的Sequence number加上前一次数据包的长度。 如果数据包还兼做ACK包则把ACK置位同时设置好Acknowledgement number把数据包发送到对方。 接收方收到对方主动发送的数据数据包后一定要回复ACK数据包如果同时有数据发往对方可以把实际数据包跟ACK数据包合在一起发送。 在拆除连接之前通讯双方可以一直相互发送接收数据数据的顺序都建立在各自的Sequence number基础上。 图1中蓝色部分的数据通讯就表示这一阶段。 3、拆除连接 双方数据交换完毕需要拆除连接结束通讯。 3.1. 客户端发送FIN 通讯的一方向另一方发送FIN数据包表示要结束通讯拆除连接。 客户端把数据包的Flags标准字节的FIN置位表示是通讯结束数据包。 3.2. 服务端返回ACKFIN 服务端收到客户端的FIN数据包后先回应一个ACK数据包然后也发送一个FIN数据包还是服务端也结束通讯。 3.3. 客户端回应ACK 客户端回应ACK表示接收到服务端的FIN数据双方通讯结束。 ----------------------------------------------------------------------------------- 以下结合实图解释下(个人理解不正之处望改正) 使用Wireshark在windows下抓包可以看到三次握手、Client发送24Byte的请求数据、Server发送240Byte的响应数据、四次挥手的过程在linux下用Wireshark抓包效果类似 Client IP: 192.168.100.2 Server IP: 192.168.100.55 一: 三次握手 1.1 Client 发送一个SYN数据包给Server这个数据包的序列号Seq为0窗口大小Win为65535数据长度Len为0最大分段大小MSS为1460。后面的不知道啥意思了。 1.2 Server 收到SYN数据包后要给Client答复发送一个SYNACK数据包这个数据包的序列号Seq为0确认号ACK为1即ACK收到包的Seq1窗口大小Win为8704数据长度Len为0。 1.3 Client收到SYNACK数据包后也要给Server答复发送一个ACK数据包这个数据包的序列号Seq为1确认号ACK为1即ACK收到包的Seq1窗口大小Win为65535数据长度Len为0。 二: 发送24Byte的请求数据: 2.1 Client向Server发送一个PSH标志置位的请求数据包这个数据包与1.3的数据包差不多唯一不同是数据长度Len为24。为什么与1.3数据包差不多呢 2.2 Server收到Client发送过来请求数据包后要给Client答复发送一个ACK数据包这个数据包的序列号Seq为1确认号ACK为25即ACK收到包的Seq24窗口大小Win为8680数据长度Len为0。 2.3 Server向Client发送一个PSH标志置位的响应数据包这个数据包与2.2的数据包差不多唯一不同的是数据长度Len为240.为什么和2.2数据包差不多呢 三: 接收240Byte的响应数据: 2.4 Client收到Server发送过来的响应数据包后要给Server答复发送一个ACK数据包这个数据包的序列号Seq为25确认号ACK为241即ACK收到包的Seq240窗口大小win为65295数据长度Len为0. 四: 四次挥手: 3.1 Client向Server发送一个FIN数据包表示断开连接这个数据包与2.4的数据包差不多唯一不同的是数据包FIN标志位置位。为什么和2.4数据包差不多呢 3.2 Server收到Client的FIN数据包后要给Client答复发送一个ACK数据包这个数据包序列号Seq为241确认号ACK为26即ACK收到包的Seq1窗口大小win为8704 数据长度Len为0. 3.3 Server紧接着发送一个FIN数据包给Client表示服务器也结束通讯。这个数据包与3.2数据包差不多唯一不同的是数据包FIN标志位置位。为什么和3.2数据包差不多呢 3.4 Client收到Server发送过来的FIN数据包后要给Client答复发送一个ACK数据包这个数据包序列号Seq为26确认号ACK为242即ACK收到包的Seq1窗口大小Win为8704数据长度Len为0. 至此三次握手、Client发送24Byte的请求数据、Server发送240Byte的响应数据、四次挥手的过程结束 补充 上述的解释出现好几次“为什么和**数据包差不多呢”比如2.1的数据包和1.3的数据包差不多呢。 其实两个数据包可以合并为一个数包发送我理解为重复显示。 /*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ TCP/IPTransmission Control Protocol/Internet Protocol)的简写中文译名为传输控制协议/互联网络协议协议是Internet最基本的协议。 TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型是一种通 信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网络层、传 输层、会话层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为 应用层应用程序间沟通的层如简单电子邮件传输SMTP、文件传输协议FTP、网络远程访问协议Telnet等。 传输层在此层中它提供了节点间的数据传送服务如传输控制协议TCP、用户数据报协议UDP等TCP和UDP给数据包加入传输数据并把它传输到下一层中这一层负责传送数据并且确定数据已被送达并接收。 互连网络层负责提供基本的数据封包传送功能让每一块数据包都能够到达目的主机但不检查是否被正确接收如网际协议IP。 网络接口层对实际的网络媒体的管理定义如何使用实际网络如Ethernet、Serial Line等来传送数据。 TCP/IP中的协议 1 IP 网际协议IP是TCP/IP的心脏也是网络层中最重要的协议。 IP层接收由更低层网络接口层例如以太网设备驱动程序发来的数据包并把该数据包发送到更 高层---TCP或UDP层相反IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的因为IP并没有做任何事情来确认数 据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址源地址和接收它的主机的地址目的地址。 高层的TCP和UDP服务在接收数据包时通常假设包中的源地址是有效的。也可以这样说IP地址形成了许多服务的认证基础这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项叫作IP source routing可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说使用了该选项的IP包好像是从路径上的最后一个系 统传递过来的而不是来自于它的真实地点。这个选项是为了测试而存在的说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么许多依靠IP源地址 做确认的服务将产生问题并且会被非法入侵。 2. TCP 如果IP数据包中有已经封好的TCP数据包那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查同时实现虚电路间的连接。TCP数据包中包括序号和确认所以未按照顺序收到的包可以被排序而损坏的包可以被重传。 TCP将它的信息送到更高层的应用程序例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层TCP层便将它们向下传送到IP层设备驱动程序和物理介质最后到接收方。 面向连接的服务例如Telnet、FTP、rlogin、X Windows和SMTP需要高度的可靠性所以它们使用了TCP。DNS在某些情况下使用TCP发送和接收域名数据库但使用UDP传送有关单个主机的信息。 3.UDP UDP与TCP位于同一层但它不管数据包的顺序、错误或重发。因此UDP不被应用于那些使 用虚电路的面向连接的服务UDP主要用于那些面向查询---应答的服务例如NFS。相对于FTP或Telnet这些服务需要交换的信息量较小。使用UDP的服务包括NTP网络时间协议和DNSDNS也使用TCP。 欺骗UDP包比欺骗TCP包更容易因为UDP没有建立初始化连接也可以称为握手因为在两个系统间没有虚电路也就是说与UDP相关的服务面临着更大的危险。 4.ICMP ICMP与IP位于同一层它被用来传送IP的的控制信息。它主要是用来提供有关通向目的地址 的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径而‘Unreachable’信息则指出路径有问题。另外如果路 径不可用了ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。 5. TCP和UDP的端口结构 TCP和UDP服务通常有一个客户/服务器的关系例如一个Telnet服务进程开始在系统 上处于空闲状态等待着连接。用户使用Telnet客户程序与服务进程建立一个连接。客户程序向服务进程写入信息服务进程读出信息并发出响应客户程序 读出响应并向用户报告。因而这个连接是双工的可以用来进行读写。 两个系统间的多重Telnet连接是如何相互确认并协调一致呢TCP或UDP连接唯一地使用每个信息中的如下四项进行确认 源IP地址 发送包的IP地址。 目的IP地址 接收包的IP地址。 源端口 源系统上的连接的端口。 目的端口 目的系统上的连接的端口。 端口是一个软件结构被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的 数。服务进程通常使用一个固定的端口例如SMTP使用25、Xwindows使用6000。这些端口号是‘广为人知’的因为在建立与特定的主机或服 务的连接时需要这些地址和目的地址进行通讯。 转载于:https://www.cnblogs.com/jwyue0520/archive/2012/12/03/2800242.html