网络协议&建立TCP连接

网络协议(networking protocol)

>网络协议即为计算机网络中进行数据交换而建立的规则、标准或约定的集合。网络协议是由三个要素组成:语义、语法、时序,人们形象地把这三个要素描述为:语义表示要做什么,语法表示要怎么做,时序表示做的顺序。
常见的协议有:TCP/IP协议、IPX/SPX协议、NetBEUI协议等,Internet上的计算机使用的是TCP/IP协议。由于网络节点之间联系的复杂性,在制定协议时,通常把复杂成分分解成一些简单成分,然后再将它们复合起来。最常用的复合技术就是层次方式。

网络协议层次结构:

  • 结构中的每一层都规定有明确的服务及接口标准。
  • 把用户的应用程序作为最高层。
  • 除了最高层外,中间的每一层都向上一层提供服务,同时又是下一层的用户。
  • 把物理通信线路作为最低层,它使用从最高层传送来的参数,是提供服务的基础。

层次划分:

OSI/RM模型(Open System Interconnection/Reference Model)将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer) ,其中第四层完成数据传送服务,上面三层面向用户。

  • 物理层: 是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础。物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。如果您想要用尽量少的词来记住这个第一层,那就是"信号和介质"。
  • 数据链路层: 是OSI参考模型中的第二层,介乎于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。
  • 网络层: 是OSI参考模型中的第三层,介于传输层和数据链路层之间,目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。
  • 表示层: 位于OSI分层结构的第六层,它的主要作用之一是为异种机通信提供一种公共语言,以便能进行互操作。
  • 应用层: 也称为应用实体(AE),是七层OSI模型的第七层,直接和应用程序接口并提供常见的网络应用服务,应用层也向表示层发出请求。

常用协议

  • TCP/IP协议
    作为互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操作都离不开TCP/IP协议。不过TCP/IP协议也是这三大协议中配置起来最麻烦的一个,单机上网还好,而通过局域网访问互联网的话,就要详细设置IP地址,网关,子网掩码,DNS服务器等参数。
    TCP/IP尽管是目前最流行的网络协议,但TCP/IP协议在局域网中的通信效率并不高,使用它在浏览“网上邻居”中的计算机时,经常会出现不能正常浏览的现象。此时安装NetBEUI协议就会解决这个问题。

    • ICMP协议(Internet Control Message Protocol)是Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
  • UDP协议
    UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。常用的UDP端口号有:
    应用协议 | 端口号 -- | -- DNS | 53 TFTP | 69 SNMP| 161

  • NETBEUI协议
    即NetBios Enhanced User Interface ,或NetBios增强用户接口。NetBEUI协议是一种短小精悍、通信效率高的广播型协议,安装后不需要进行设置,特别适合于在“网络邻居”传送数据。所以建议除了TCP/IP协议之外,小型局域网的计算机也可以安上NetBEUI协议。

  • IPX/SPX协议
    IPX(Internet work Packet Exchange,互联网络数据包交换) IPX/SPX协议是Novell开发的专用于NetWare网络的协议,现在已经不光用于NetWare网络,大部分可以联机的游戏都支持IPX/SPX协议,例如星际、cs。虽然这些游戏都支持TCP/IP协议,但通过IPX/SPX协议更省事,不需要任何设置。IPX/SPX协议在局域网中的用途不大。它和TCP/IP协议的一个显著不同是它不使用ip地址,而是使用mac地址。

TCP/IP协议:

>TCP/IP是一个协议集,为应用提供一些"低级"功能,这些包括IP、TCP、UDP。
TCP(Transmission Control Protocol) 传输控制协议是一种面向连接(连接导向)的、可靠的、基于字节流的运输层通信协议,在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。

最重要的"商业"TCP/IP服务有:
  • 文件传送(File TransferProtocol):
    文件传送协议FTP(File TransferProtocol)允许用户从一台计算机到另一台取得文件,或发送文件到另外一台计算机。

  • RLogin远程登录(Remotelogin):
    网络终端协议TELNET允许用户登录到网络上任一计算机上。你可启动一个远程进程连接到指定的计算机,直到进程结束,期间你所键入的内容被送到所指定的计算机。

  • SMTPPOP3电子邮件(Mail):
    允许你发送消息给其它计算机的用户。

TCP/IP扩展(可调用)服务:
  • NFS网络文件系统(NetworkFileSystem):
    这种访问另一计算机的文件的方法非常接近于流行的FTP。网络文件系统提供磁盘或设备服务,而无需特定的网络实用程序来访问另一系统的文件。可以简单地认为它是一个外加的磁盘驱动器。

  • 远程打印(RemotePrinting):
    允许你使用其它计算机上的打印机,好像这些打印机直接连到你的计算机上。

  • 折叠远程执行(RemoteExecution):
    允许你请求运行在不同计算机上的特殊程序。当你在一个很小的计算机上运行一个需要大机系统资源的程序时,这时候远程执行非常有用。

  • 名字服务器(NameServers):
    在一个大的系统安装过程中,需要用到大量的各种名字,包括用户名、口令,姓名、网络地址、帐号等,管理这些是非常令人乏味的。因此将这些数据形成数据库,放到一个小系统中去,其它系统通过网络来访问这些数据。

  • 终端服务器(TerminalServers):
    很多的终端连接安装不再直接将终端连到计算机,取而代之的是,将他们连接到终端服务器上。如果你的终端想连上去,只用键入要连的计算机名就可。通常有可能同时有几个这种连接,这时终端服务器采用快速开关技术来切换。

TCP连接的建立(三次握手四次挥手)

通常情况建立一个TCP连接都会有三个阶段: tcp三次握手、数据传输、tcp四次挥手。

TCP报文解析

  • 建立、拆除连接、传输数据应用同样的报文: mark
  • 报文段首部解析
    mark

连接/终断

(节选于:http://blog.csdn.net/whuslei/article/details/6667471/#comments)

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:
mark

  • 先来看看如何建立连接的:
    mark
    首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

  • 断开连接简单过程如下:
    mark
    注意: 中断连接端可以是Client端,也可以是Server端。

    • 假设Client端发起中断连接:
      假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果server端还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请你继续等我的消息"。这个时候Client端就进入FIN_ WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

整个过程Client端所经历的状态如下:
mark

Server端所经历的过程如下:
mark

注意: 在TIME_ WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。

TCP协议端口连接状态:

  • LISTENING: 提供某种服务,侦听远方TCP端口的连接请求,当提供的服务没有被连接时,处于LISTENING状态,端口是开放的,等待被连接。

  • SYN_ SENT (客户端状态): 客户端调用connect,发送一个SYN请求建立一个连接,在发送连接请求后等待匹配的连接请求,此时状态为SYN_SENT。

  • SYN_ RECEIVED (服务端状态): 在收到和发送一个连接请求后,等待对方对连接请求的确认,当服务器收到客户端发送的同步信号时,将标志位ACK和SYN置1发送给客户端,此时服务器端处于SYN_RCVD状态,如果连接成功了就变为ESTABLISHED,正常情况下SYN _RCVD状态非常短暂。

  • ESTABLISHED: ESTABLISHED状态是表示两台机器正在传输数据。

  • FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认,主动关闭端应用程序调用close,TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态。

  • FIN-WAIT-2: 从远程TCP等待连接中断请求,主动关闭端接到ACK后,就进入了FIN-WAIT-2 。这是在关闭连接时,客户端和服务器两次握手之后的状态,是著名的半关闭的状态了,在这个状态下,应用程序还有接受数据的能力,但是已经无法发送数据,但是也有一种可能是,客户端一直处于FIN_WAIT_2状态,而服务器则一直处于WAIT_CLOSE状态,而直到应用层来决定关闭这个状态。附半关闭例图:
    mark

  • CLOSE-WAIT: 等待从本地用户发来的连接中断请求 ,被动关闭端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT。

  • CLOSING: 等待远程TCP对连接中断的确认,处于此种状态比较少见。

  • LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认,被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接,TCP也发送一个 FIN,等待对方的ACK.进入LAST-ACK。

  • TIME-WAIT: 在主动关闭端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态,等待足够的时间以确保远程TCP接收到连接中断请求的确认,很大程度上保证了双方都可以正常结束,但是也存在问题,须等待2MSL时间的过去才能进行下一次连接。

  • CLOSED: 被动关闭端在接受到ACK包后,就进入了closed的状态,连接结束,没有任何连接状态。

问题:

  • 为什么连接的时候是三次握手,关闭的时候却是四次握手?
    答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

  • 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
    答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假设网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

转载于:https://my.oschina.net/1995blog/blog/1593440

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值