从字面意思来看,TCP/IP协议是指TCP与IP两种协议,然而在很多情况下,他只是利用IP进行通信时所必须用到的协议群的统称。
计算机网络体系结构分层
计算机网络体系结构分层
TCP/IP基础
1.TCP/IP的具体含义 互联网进行通信时,需要响应的网络协议,TCP/IP原本就是为使用互联网而开发定制的协议族,因此,互联网的协议就是TCP/IP,TCP/IP就是互联网的协议。 网际协议群 2.数据包 包,帧,数据包,段,消息 以上五个术语都用来表述数据的单位,大致区
-
分如下: 包可以说是全能性术语; -
帧用于表示数据链路层中包的单位 -
数据包是IP和UDP等网络层以上的分层中包 的单位; -
段则表示TCP数据流中的信息; -
消息是指应用协议中数据的单位。
每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。 网络传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上一层传过来的数据。在数据包的首部,明确标明了协议应该如何读取数据。看到了首部,也就能够了解该协议必要的信息以及所要处理的数据。包首部就像协议的脸。 3.数据处理流程 下图以用户a向用户b发送邮件为例子: 1.应用程序处理 首先应用程序会进行编码处理,这些编码相当于OSI的表示层功能; 编码转化后,邮件一不定马上被发送出去,这种何时发送数据的管理功能,相当于OSI的会话层功能。 2.TCP模块的处理 TCP根据应用的指示,负责建立连接,发送数据以及断开连接。TCP提供将应用层发来的数据顺利发送至对端的可靠传输。为了实现这一功能,需要在应用层数据的前端附加一个TCP首部。 3.IP模块的处理 IP将TCP传过来的TCP首部和TCP数据合起来当做自己的数据,并在TCP首部的前端加上自己的IP首部,IP包生成后,参考路由控制表决定受此IP包的路由或主机。 4.网络接口(以太网驱动)的处理 从IP传过来的IP包对于以太网来说就是数据。给这些数据附加上以太网首部并进行发送处理,生成的以太网数据包将通过物理层传输给接收端。 5.网络接口(以太网驱动)的处理 主机收到以太网包后,首先以太网首部找到MAC地址判断是否为发送给自己的包,若不是则丢弃数据。如果是发送诶自己的包,则从以太网包首部中的类型确定数据类型,再传给相应的模块。 6.IP模块的处理 IP模块接收到数据后也做类似的处理,从包首部中判断次IP地址是否与自己的IP地址匹配,如果匹配则根据首部的协议类型将数据发给对应的模块。 7.TCP模块的处理 在TCP模块中,首先会计算一下校验和。,判断数据是否被破坏。然后检查是否在按照接收数据。检查端口号,确定具体的应用程序。数据被完整的接收后,会传给由端口号识别的应用程序。 8.应用程序的处理 接收端应用程序会直接接收发送端发送的数据。通过解析数据,展示相关的内容。
三、传输层的TCP和UDP
TCP/IP中有两个具有代表性的传输层协议,分别是TCP和IP TCP是面向连接的,可靠的流协议。流就是指不间断的数据结构,当应用程序采用TCP发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。TCP为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制(流量控制)”,“拥塞控制”,提高网络利用率等众多功能。 UDP是不具有可靠性的数据报协议。细微的处理他会交给上层的应用去完成。在UDP的情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达,因此,应用有时会根据自己的需要进行重发处理。 TCP和UDP的优缺点无法简单的,绝对的去作比较:TCP用于在传输层有必要实现可靠传输的情况;而在一方面,UDP主要用于那些对高速传输和实时性有较高要求的通信或广播。 1.端口号 数据链路和IP中的地址,分别指的是MAC地址和IP地址。前者用来识别同一链路中不同的计算机,后者用来识别TCP/IP网络中互连的主机和路由器。在传输层也有这种类似于地址的概念,那就是端口号。端口号用来识别同一台计算机中进行通信的不同应用程序。因此,他也被称为程序地址。 1.1根据端口号识别应用 一台计算机上同时可以运行多个程序。传输层协议正是利用这些端口号识别本机中正在进行通信的应用程序,并准确的将数据传输。 通过端口号识别应用 1.2通过IP地址,端口号,协议号进行通信识别
- 仅凭目标端口号识别某一个通信是远远不够的。
通过端口号,IP地址,协议号进行通信识别
①和②的通信是在两台计算机上进行的,他们的目标端口号相同,都是80.这里可以根据源端口号加以区分。 ③和①的目标端口和源端口号完全相同,但他们各自的源IP地址不同。 此外,当IP地址和端口号全都一样时,我们还可以通过协议号来区分。(TCP和UDP)。 1.3端口号的确定
- 标准既定的端口号:这种方法也叫静态方法。它是指每个应用程序都有其指定的端口号。但并不是说可以随意使用任何一个端口号。例如HTTP,FTP,TELNET等广为使用的应用协议中所使用的端口号就是固定的。这些端口号被称为知名端口号,分布在0-1023之间;除了这些端口号之外,还有一些端口号被正式注册,分布在1024-49151之间,不过这些端口号可用于任何通信用途。
- 时序分配法:服务器有必要确定监听端口号,但是接受服务的客户端没必要确定端口号。在这种方法下,客户端应用程序完全可以不用自己设置端口号,交给操作系统进行分配。动态分配的端口号范围在49125-65535之间。
1.4端口号与协议 端口号由其使用的传输层协议决定。因此,不同的传输层协议可以使用相同的端口号。 此外,那些知名的端口号与传输层协议并无关系。只要端口一致都将分配同一应用程序进行处理。 2.UDP UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。 并且他是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况,UDP也无法进行流量控制等避免网络拥塞行为 此外,传输途中出现丢包,UDP也不负责重发。 甚至当包的到达顺序出现乱序时也没有纠正的功能。 UDP常用于以下几个方面:1.包总量较少的通信(DNS,SNMP等);2.视频,音频等多媒体通信;3.限定与LAN等特定网络中的应用通信;4.广播通信。 3.TCP TCP与UDP的区别相当大。他充分的实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺讯控制。而UDP中没有这些功能。 此外,TCP是一种面向有链接的协议,只有确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。 根据TCP的这些机制,在IP这种无连接的网络上也能够实现高可靠性的通信(主要通过检验和,序列号,确认应答,重发控制,连接管理以及窗口控制等机制实现)。 3.1三次握手 TCP提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好两端之间的准备工作。 所谓三次握手是指建立一个TCP连接时需要客户端和服务器端总共发送三个包以确认连接的建立。 **第一次握手:**客户端将标志位syn置为1,随机产生一个值seq=j,并将该数据包发送给服务器端,客户端进入SYN_SENT转态,等待服务端确认。 **第二次握手:**服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端已确认连接请求,服务器端进入SYN_RCVD状态)。 **第三次握手:**客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1, 并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后?客户端和服务器端之间就可以开始传输数据。 3.2四次挥手 四次挥手即终止TCP连接,就是断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。 由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会收到数据了,但是在这个TCP连接上任能发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。 流程图: 中断连接段可以是客户端,也可以是服务器端。 第一次挥手:客户端发送一个FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。 第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,这时客户端继续等待服务器端的FIN报文。 第三次挥手:当服务器端确定数据已完成,则向客户端发送FIN=N报文,告诉客户端,可以准备关闭连接了。 第四次挥手:客户端收到FIN=N报文后,就可以关闭连接了,但是他怕服务器不知道要关闭,所以发送ack=N+1后,服务器收到ACK后,就知道可以断开连接。客户端等待后依然没有回复,则证明服务器端正常关闭,完成第四次挥手。
|