网络编程基础知识

来源:互联网 发布:大数据测试的工具简介 编辑:程序博客网 时间:2024/06/10 17:24

TCP/IP的分层模型

OSI协议参考模型,它是基于国际标准化组织(ISO)的建议发展起来的,

它分为7个层次:应用层、表示层、会话层、传输层、网络层、数据链路层及物理层。

这个7层的协议模型虽然规定得非常细致和完善,但在实际中却得不到广泛的应用,其重要的原因之一就在于它过于复杂。

但它仍是此后很多协议模型的基础。与此相区别的TCP/IP协议模型将OSI7层协议模型简化为4层,从而更有利于实现和使用。




一、涉及到四个协议:

1.以太网协议

格式:


2.IP协议

格式


3.TCP协议

格式:


4.UDP协议

格式:


二、TCP/IP的各层简介

1、网络接口层

网络接口层是TCP/IP的最底层,负责将二进制流转换成数据帧,并进行数据帧的发送和接收。数据帧是网络传输的基本单元。

所谓数据帧(Data frame),就是数据链路层协议数据单元,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如IP数据包


2、网络层

网络层负责在主机之间的通信中选择数据包的传输路径,即 路由。当网络收到传输层的请求后,使用路由算法来确定是直接交付数据包,还是把它传递给路由器,最后把数据包交给适当的网络接口进行传输。


3、传输层

负责实现应用程序之间的通信服务,又称为端到端通信。
传输层要提供可靠的传输服务,以确保数据到达无差错、无乱序。为了达到这个目的,传输层协议软件要进行协商。传输层协议软件要把传输的数据流分为分组。


4、应用层

应用层是分层模型的最高层。应用程序使用相应的应用层协议,把封装好的数据交给传输层或是传输层接收数据并处理。


三、TCP/IP模型边界特性 

TCP/IP分层模型中有两大边界特性:

一个是地址边界特性,它将IP逻辑地址与底层网络的硬件地址分开;

一个是操作系统边界特性,它将网络应用与协议软件分开 。



四、核心协议


TCP连接方式

TCP的上一层是应用层,TCP向应用层提供可靠的面向对象的数据流传输服务,TCP数据传输实现了从一个应用程序到另一个应用程序的数据传递。它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信。),应用程序通过向TCP层提交数据接发送/收端的地址和端口号而实现应用层的数据通信。
通过IP的源/目的可以惟一地区分网络中两个设备的连接,通过socket的源/目的可以惟一地区分网络中两个应用程序的连接。 

1)三次握手:

TCP是面向连接的,所谓面向连接,就是当计算机双方通信时必需先建立连接,然后进行数据通信,最后拆除连接三个过程。TCP在建立连接时又分三步走:
第一步(A->B):主机A向主机B发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号;
第二步(B->A):主机B在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示主机B的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。 
第三步(A->B):主机A也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。


(2)四次挥手断开连接

a.现在的网络通信都是基于socket实现的,当客户端将自己的socket进行关闭时,内核协议栈会向服务器自动发送一个FIN置位的包,请求断开连接。我们称首先发起断开请求的一方称为主动断开方。

b.服务器端收到请客端的FIN断开请求后,内核协议栈会立即发送一个ACK包作为应答,表示已经收到客户端的请求

c.服务器运行一段时间后,关闭了自己的socket。这个时候内核协议栈会向客户端发送一个FIN置位的包,请求断开连接

d.客户端收到服务端发来的FIN断开请求后,会发送一个ACK做出应答,表示已经收到服务端的请求


UDP连接方式

UDP即用户数据报协议,是一种面向无连接的不可靠传输协议,不需要通过3次握手来建立一个连接,同时,一个UDP应用可同时作为应用的客户或服务器方。
由于UDP协议并不需要建立一个明确的连接,因此建立UDP应用要比建立TCP应用简单得多。UDP比TCP协议更为高效,也能更好地解决实时性的问题,如今,包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都使用UDP协议。


协议选择

协议的选择应该考虑到数据可靠性、应用的实时性和网络的可靠性。

对数据可靠性要求高的应用需选择TCP协议,而对数据的可靠性要求不那么高的应用可选择UDP传送。

TCP协议中的3次握手、重传确认等手段可以保证数据传输的可靠性,但使用TCP协议会有较大的时延,因此不适合对实时性要求较高的应用;而UDP协议则有很好的实时性。

网络状况不是很好的情况下需选用TCP协议(如在广域网等情况),网络状况很好的情况下选择UDP协议可以减少网络负荷。


五、编程模型



0 0