现在的位置: 首页 > 综合 > 正文

TCP/IP协议笔记

2019年03月11日 ⁄ 综合 ⁄ 共 2644字 ⁄ 字号 评论关闭

协议分层

ISO/OSI(国际标准化组织/开放系统互联)参考模型把数据通信协议分为7层,自底向上分别是物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。

IETFTCP/IP的层次模型可以看作比OSI少几层的结构。一般分为4层,自底向上分别是网络存取层,网际层,传输层,应用层。

不同层次对数据使用有不同的名称。在应用层,TCP应用称数据为StreamUDP的应用程序称数据为Message。在传输层TCP把数据叫做Segment,而UDP称为Packet。在网际层,所有的数据视为Datagram。在网络存取层,数据称为Frame

网络存取层不是物理层,它定义和物理层的接口,可以认为是操作系统中的硬件驱动程序这一层。粗略可以认为和OSI的数据链路层等价。

网络存取层协议有PPPEthernet等。PPP代表Point-to-PointProtocol,用来直连两个网络节点,多用来拨号访问。有PPPoE(PPPover Ethernet)PPPoA(PPPover ATM)EthernetLAN技术中基于Frame的协议族。Ethernet802.3定义。它定义了物理层和数据链路层的内容。

在网际层,包括IP,ARP,RARP,ICMP协议。ARP协议用来把IP转化为MAC的。RARP反过来是通过MAC地址来得到IP地址,为了配置IP的目的。RARP已被DHCP取代。ICMP用来汇报错误,诊断,路由等。

传输层协议是主要是TCP/UDP,比较新的有SCTP。在创建socket的时候可以指定TCP/UDPSOCK_STREAM指示用TCPSOCK_DGRAM指示用UDP。还可以指定一种类型是SOCK_RAW,相当于用户可以直接收发IP层的报文,基于此,用户可以实现自己的传输层协议。

应用层协议有HTTPFTPDHCPDNS等。DHCP利用UDP协议实现。DNS既利用了UDP,又利用了TCP

连接建立拆除

TCP连接建立需三次握手。拆除是四次挥手。

1、建立连接协议(三次握手)
1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1
2)服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。
3)客户必须再次回应服务段一个ACK报文,这是报文段3
2
、连接终止协议(四次挥手)
  由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
 (1TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
 (2)服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
 (3)服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
 (4)客户段发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACKSYNACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

TCP编程中,用close来关闭socketdescriptor,这时通过此sd既不能读也不能写;用shutdown来指定关闭读、写还是读写。

发送接收数据

TCP传输是可靠传输,具有错误检测,流控,拥塞控制。

TCP在发送Segment时会给Segment编号,确保接收端能够按序组装收到的SegmentTCP采用CumulativeAcknowledgement,一条确认消息代表被确认的序号之前的所有Segment都已收到,不用一一确认。TCP发送端检测到Segment丢失,会重传。序号和确认确保了可以丢掉重复Segment,重传丢失的包。TCPcksum确保了正确性。

TCP采用滑窗(SlidingWindow)的方法解决发端发送快,收端接收慢的问题,此为流控。TCP还有拥塞控制算法

交换方式

数据通信网的交换方式有电路交换,报文交换和分组交换。电路交换电路接续时间长,线路利用率低。报文交换采用存储转发的方式,若报文较长,需要较大容量的存储器,若将报文放到外存储器中去时,会造成响应时间过长,增加了网路延迟时间。另一方面报文交换通信线路的使用效率仍不高。分组交换与报文交换都是采用存储转发交换方式。分组交换首先把来自用户的信息文电暂存于存储装置中,并划分为多个一定长度的分组,每个分组前边都加上固定格式的分组标题,用于指明该分组的发端地址、收端地址及分组序号等。以报文分组作为存储转发的单位,分组在各交换节点之间传送比较灵活,交换节点不必等待整个报文的其他分组到齐,一个分组、一个分组地转发。这样可以大大压缩节点所需的存储容量,也缩短了网路时延。另外,较短的报文分组比长的报文可大大减少差错的产生,提高了传输的可靠性。每个分组可以分开选路。

路由器完成IP选路的功能。路由表可以用RADIX树的方式存储。RADIX树是二叉树,左孩子是0右孩子是1。这样整个路由表可以保存在深度最深32(对IPv4)的树中。除了RADIX树的方式,还有Hashtable的方式。还有完全由硬件来存储和查找路由表的方式。

参考资料:

TCP/IP网络管理(O'Reilly)

http://en.wikipedia.org/wiki/Address_Resolution_Protocol

http://wanlong.blog.51cto.com/287340/114592

http://www.sharecenter.net/thread-22233-1-1.html

抱歉!评论已关闭.