网站大量收购独家精品文档,联系QQ:2885784924

传输层——tcpudp.ppt

  1. 1、本文档共73页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
传输层——tcpudp

ssthresh=16 ssthresh=12 24/2 cwnd 拥塞避免算法和慢启动算法需要对每个连接维持两个变量: 一个拥塞窗口cwnd和一个慢启动门限ssthresh。这样得到的算法的工作过程如下: 1) 对一个给定的连接,初始化cwnd为1个报文段, ssthresh为65535个字节。 2) TCP输出例程的输出不能超过cwnd和接收方通告窗口的大小。 拥塞避免是发送方使用的流量控制,而通告窗口则是接收方进行的流量控制。前者是发送方感受到的网络拥塞的估计,而后者则与接收方在该连接上的可用缓存大小有关。 3) 当拥塞发生时(超时或收到重复确认),ssthresh被设置为当前窗口大小的一半(cwnd和接收方通告窗口大小的最小值,但最少为2个报文段)。此外,如果是超时引起了拥塞,则cwnd被设置为1个报文段(这就是慢启动)。 4) 当新的数据被对方确认时,就增加cwnd,但增加的方法依赖于是否正在进行慢启动或拥塞避免。如果cwnd小于或等于ssthresh,则正在进行慢启动,否则正在进行拥塞避免。 慢启动一直持续到以前拥塞发生时位置的一半时候才停止(因为前面记录了在步骤2中给我们制造麻烦的窗口大小的一半),然后转为执行拥塞避免。 三、TCP的连接与状态机 要使每一方都能够确知对方的存在。 要允许双方协商一些参数(如,最大报文段长度,最大窗口大小,服务质量等)。 能够对运输实体资源(如缓冲区大小,连接表中的项目等)进行分配。 主动打开—被动打开 在客户机/服务器模式下,连接的建立请求是由客户机发起的,它执行“主动打开”,而服务器执行“被动打开”,并对客户机的连接请求被动响应。? 在服务器进程的实现中,首先让服务器执行“被动打开”,告诉其TCP要准备接受客户进程的连接请求。然后服务器进程就处于“听(listen)”的状态,不断检测是否有客户进程要发起连接请求。如有,即作出响应。 第一次:主机A的TCP向主机B的TCP发出连接请求报文,其首部中的比特同步SYN置为1,同时选择一个序号x,该序号称为初始序号ISN(Initial Sequence Number)。 第二次:主机B的TCP收到连接请求报文后,如同意,则发回确认。在确认报文中将SYN置为1,确认序号为x+1,同时也为自己选择一个序号y。 第三次:主机A的TCP收到此报文段后,还要向B给出确认,其确认序号为y+1。? 然后客户机A就可以通知上层应用进程,连接已经建立。?当B收到A的确认后也通知上层应用进程,连接已经建立。 “三次握手”是由连接双方的TCP完成的,应用程序只要一个简单的connect调用即可。比如执行telnet命令,当出现login时连接已建立,建立的过程TCP协议实体在后台进行。 A.1037B.135:s 1415531521:1415531521(0) win 4096 mss 1024 B.135A.1037 : s 1823083521:1823083521(0) ack 1415531522 win 4096 mss 1024 A.1037 B.135 : . ack 1823083522 win 4096 TCP的有限状态机 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; m_pSvrSocket=new CBoxSocket(); if(!m_pSvrSocket-Create(6666)) { AfxMessageBox(Error creating socket!); delete m_pSvrSocket; m_pSvrSocket=NULL; return -1; } m_pSvrSocket-Listen(5); return 0; } 利用TCP的应用示例 创建插座 void CBoxSocket::OnAccept(int nErrorCode) { CBoxSocket* pSock=new CBoxSocket(); if(Accept(*pSock)) { ConnectedSockets.AddTail(pSock); m_nCount+=1; } else { AfxMessageBox(Error Accepting!); delete pSock; } CSocket::OnAccept(nErrorCode); }; 接受请求 void CBoxSocket::OnReceive(int nErrorCode

文档评论(0)

zhuwo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档