将psh(push)置为1,即将数据直接向上层传输
syn-send :意味同步发送,syn为同步位,所以在建立连接时,都需要将syn位置为1
当URG = 1时表明紧急指针字段有效,他告诉系统此报文段中有紧急数据,应尽快传送,而不要按原来的排队顺序来传送,发送方的TCP就把紧急数据放到本报文段数据的最前面。URG标志位要与首部中的紧急指针字段配合使用,紧急指针指向数据段中的某个字节,(数据从第一个字节到指针所指的字节就是紧急数据)。值得注意的是即使窗口为0时也可以发送紧急数据,紧急数据不进入接收缓冲区直接交给上层进程。
当两个应用进程进行交互式通信时,有时客户发一个请求给服务器时希望立即能够收到对方的响应,这种情况下,客户应用程序通知TCP使用推送(push)操作,TCP就把PSH置为1,并立即创建一个报文段发送过去,类似的服务器的TCP收到一个设了PSH标志的报文段时就尽快将所有收到的数据立即提交给服务进程,而不在等到整个缓存都填满了再向上交付。
但URG为1时,表示从数据开始到紧急指针部分,不必进入缓冲区直接交付上层应用.
而PSH为1时,通知缓冲区,数据进入缓冲区,只要数据完整的接收完后立即交付给上层应用.(而不必等缓冲区满)
由于tcp要实现全双工通信,所以要求双方都具备收发功能,这就要求第一次建立请求之后,双方都要各自进行一次收发。
三次握手的协商参数
切分后的报文段的第一个字节字节号作为数据包的序列号。
为保证tcp可靠传输的一个方案,其特点就是累计确认,例如 接受方受到连续按序的五个报文时候发送确认消息6,就代表前五个数据包都收到了,期待第六个数据包。
哪个报文没收到就要求发送方重发哪个报文,但缺点也很明显,效率低。
每次批量发送数据包,由于与批量传输,所以适用于通信状况比较稳定的场所。但数据包不可达时,选用后退n或者选择重发进行数据重传。
接收方接收后回复ack时顺带一些需要发送给发送方的数据。
在tcp建立连接时,接收方会高速发送方他的接收窗口的大小,发送方的发送窗口就会根据接收方所能接受的窗口动态的调整窗口大小。 工作原理即接收方发送确认包时,发送方动态向右滑动窗口继续发送新数据,且该窗口始终保持接收方的当前所能接受的窗口大小。
拥塞窗口根据网络拥塞程度动态变化,一旦网络拥塞就减小拥塞窗口,以减少发送到网络中的报文数量。 这其中有个关键字 MSS(最大报文段大小),取值一般取1460(tcp头和ip头各占20字节,加起来1500刚好是以太网标准的mtu)
流量控制是收发两端的问题,即点对顶啊问题,通过抑制发送方发送数据的大小进行控制。这其中就涉及到一个重要的概念,缓存,如下图所示:通信两端在每道工序中货扮演生产者或扮演消费者的角色,先将数据放入缓存,一旦缓存一满就将数据交予下一工序,并提醒下部工序的角色做好准备,正是这样以套紧密联接的分工,才保证的流量控制。
而拥塞控制是全局性问题,无法做到完全解决,只能说在收发两端使用慢启动和拥塞避免的手段尽可能的优化。
如下所示,注意三次握手和数据传输时ack的叠加方式 三次握手时,数据的length为0,所以ack只能基于发送方的seq+1 数据传输时,length!=0,所以ack基于发送方的seq+length+1
因为通信是双向的,所以需要经过双方都确认才可,而结束是单方面要求,必须经由双方各自全双工通道都断开连接才可。
对方tcp服务关闭
Ddos攻击(分布式拒绝式服务攻击)
发送方连方 1000 2000 3000 4000 5000 6000的报文,接收方回复ack序列号为4000,若为gbn需发送那些报文?若为sr则又要发送那些报文? 答:gbn回4000则是要求发送4000代表前4000的都收到了,4000字节段的报文可能出现问题,要求对方发送4000之后的报文。 而sr则是代表3000段收到了要求发4000,其他报文段没有回复确认同样需要发送。即sr回复4000需要发送1000 2000 4000 5000 6000
a向b发送数据,序列号分别是70 110。
报文字节数是多少? 40b收到第一个报文段的确认号是多少? 110第二次收到报文后回复180,问第二个报文段长度是多少? 70a发送的第一个报文丢失,用累计确认的方式回复的确认好为多少? 70拥塞问题为何超时重传无法解决? 重传会导致更多的丢失包,进而导致网络崩坏。
