计算机基础-网络协议-TCP/IP

1. 理解什么是协议
  • 计算机进行通信时,通信双方必须遵守同一组约定,这个约定规定了怎样建立连接、如何识别等。网络协议有三个要素:语法、语义、时序。
    (1)语法:即数据与控制信息的结构或格式;
    (2)语义:即需要发出何种控制信息,完成何种动作以及做出何种响应;
    (3)时序(同步),即事件实现顺序的详细说明。
2. TCP/IP网络协议族的构成,每层协议在应用程序中发挥的作用
  • TCP/IP网络协议族是由
  • 应用层: HTTP ,FTP,TFTP,SMTP,SNMP,DNS,telent
  • 传输层:TCP.UDP
  • 网络层:ICMP,IGMP.IP,ARP
  • 数据链路层:VLAN,TRUNK,MTP
    在这里插入图片描述
    在这里插入图片描述
3. 三次握手和四次挥手详细原理,为什么要使用这种机制
  • TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接,就好像你给别人打电话,必须等线路接通了、对方拿起话筒建立了连接才能相互通话。
  • 一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
  • 在这里插入图片描述
1. 建立连接三次握手

TCP用三次握手(three-way handshake)过程创建一个连接。在连接创建过程中,很多参数要被初始化,例如序号被初始化以保证按序传输和连接的强壮性。
  一对终端同时初始化一个它们之间的连接是可能的。但通常是由一端打开一个套接字(socket)然后监听来自另一方的连接,这就是通常所指的被动打开(passive open)。服务器端被被动打开以后,用户端就能开始创建主动打开(active open)。
  1)客户端通过向服务器端发送一个SYN来创建一个主动打开,作为三路握手的一部分。客户端把这段连接的序号设定为随机数 A。
  2)服务器端应当为一个合法的SYN回送一个SYN/ACK。ACK 的确认码应为 A+1,SYN/ACK 包本身又有一个随机序号 B。
  3)最后,客户端再发送一个ACK。当服务端受到这个ACK的时候,就完成了三路握手,并进入了连接创建状态。此时包序号被设定为收到的确认号 A+1,而响应则为 B+1
 
  Win:窗口字段明确指出现在允许对方发送的数据量(经常变化)
  Len:TCP数据段长度
  MSS(Maximum Segment Size):最大报文段长度,即每个TCP报文段中的数据字段的最大长度.这里需要在握手的时候进行协商,双方都给出MSS,最后以最小MSS确定为最终的MSS。IP数据报最大传输单位为MTU(Maximum Transmission Unit,Effect of short board),对于大多数使用以太网的局域网来说,MTU=1500。MSS往往基于MTU计算出来,通常MSS=MTU-sizeof(IP Header)-sizeof(TCP Header)=1500-20-20=1460,如果服务器MSS=1460,而客户端的MSS=1440,最终为1440。

在TCP的三次握手中,不仅是建立了连接,还让双方交换了有效信息,过程如下:
  1) 嗨~ , 这是我sequence number和MSS
  2) 我收到啦~, 这是我sequence number和MSS
  3) 我也收到~

为什么需要三次握手?
  • 都是为了满足”在不可靠信道上可靠地传输信息”这一需求。请注意这里的本质需求,信道不可靠,数据传输要可靠。还是那句话,就是要保证在一段有效时间内,双方收到对方的有效信息。
2. 断开连接四次挥手

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。比如服务器收到一个FIN只意味着客户端不再发送数据,但它还可以向客户端发送数据,当服务器不再发数据了,他也要向客户端发送FIN。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

  • 四次挥手过程如下:
      1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
      2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
      3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
      4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
      在这里插入图片描述
4. 有哪些协议是可靠,TCP有哪些手段保证可靠交付

1、将数据截断为合理的长度。
应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。
2、超时重发
当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
3、对于收到的请求,给出确认响应
当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。(之所以推迟,可能是要对包做完整校验)
4、校验出包有错,丢弃报文段,不给出响应,TCP发送数据端,超时时会重发数据
TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。 如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。 (希望发端超时并重发)
5、对失序数据进行重新排序,然后才交给应用层
既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。 如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
6、对于重复数据,能够丢弃重复数据
既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
7、TCP还能提供流量控制。
TCP连接的每一方都有固定大小的缓冲空间。
TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。TCP使用的流量控制协议是可变大小的滑动窗口协议。

TCP提供一种面向连接的、可靠的字节流服务。

面向连接:意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值