📄 58.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>123</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center"> ● UNIX网络编程 (BM: clown) </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="54.htm">上一层</a>][<a href="59.htm">下一篇</a>]
<hr><p align="left"><small>发信人: clown (最近很忙), 信区: UNP <br>
标 题: unp第二章体会 <br>
发信站: UNIX编程 (2001年07月10日14:15:02 星期二), 站内信件 <br>
<br>
版权说明:欢迎转载,但是请注明转载自Unix编程bbs:202.117.0.201 2323 <br>
<br>
人越来越懒,天气越来越热,天天呆在试验室里,简直不想看书呀。 <br>
不过看了第二章,觉得再看一次也有很多体会,真是经典书籍! <br>
<br>
总的说,对TCP/IP协议,IPv6有了更深的理解,特别是以前容易混淆的 <br>
MSS和MTU以及数据报的分段,这次真的是彻底搞清楚了。 <br>
另外就是状态转换图中的TIME_WAIT状态,差点都忘记了,补习的真是及时呀。;) <br>
另外一点就是可以这样telnet: <br>
telnet ip_address echo/daytime <br>
呵呵,确实是可以学到不少东西呀。 <br>
<br>
下面首先详细介绍数据报的分段: <br>
<br>
应用程序写TCP套接口的过程如下图所示: <br>
应用进程 应用进程缓冲区 <br>
| | 用户进程 <br>
------------------------------------- <br>
| | 内核 <br>
▼ ▼ <br>
TCP 套接口发送缓冲区 <br>
| | MSS大小的TCP分组 <br>
| | 通常MSS<=MTU-40(IPv4)或MTU-60(IPv6) <br>
IP ▼ <br>
| | MTU大小的IPv4或IPv6分组 <br>
| | <br>
输出队列 ▼ <br>
<br>
应用程序写TCP套接口时,内核从应用进程的缓冲区拷贝所有的数据到 <br>
套接口的发送缓冲区。如果套接口缓冲区不能容纳应用进程的数据,则 <br>
应用进程睡眠(阻塞方式),否则应用进程成功返回。 <br>
TCP取套接口发送缓冲区的数据并把它发送给对方TCP,他根据接收方TCP选项中 <br>
的MSS来组织数据片的大小。MSS(maximum segment size)是接受方缓冲区所能 <br>
接收的报文段的最大长度,一般设置成MTU减去IP和TCP头不的固定长度。为什么 <br>
取这个值?等一下介绍MTU的时候再来说明。 <br>
TCP以MSS大小或者更小的数据报加上TCP头部以后传送给IP,当对方没有告知MSS <br>
的时候就用536Byte(后面回介绍原因)。IP给每个TCP分节安装IP头部以后,把数据 <br>
报传替给数据链路层。 <br>
下面说明MTU,很多网络有一个最大传输单元MTU(maximum transmission unit),我 <br>
对MTU的理解是为了防止网络资源被局域网的某台主机独占,不知道是否正确? <br>
MTU的值是由硬件规定的,例如以太网的MTU是1500字节,也就是说以太网中一个报文的 <br>
长度不能超过1500字节。TCP层为了防止数据在IP层进行分片,因此取MSS为MTU减去IP <br>
和TCP头不的固定长度,另外IPv4和IPv6都定义了任何主机都要支持的最小数据报大小 <br>
即最小重组缓冲区大小,对于IPv4其值为576Byte,因此当对方没有告知MSS的时候 <br>
就用536Byte(576-40得到)。 <br>
由上可知,MSS的目的就是为了避免分片,在TCP层就将数据报分成MSS大小,加上TCP <br>
头部以后传到IP层。 <br>
在IP层,如果数据报大小超过了MTU,就会将数据报分片以后再传送给链路层,各分片 <br>
到达目的地之前不会被重组。IPv4中主机和路由器都可能会对数据报分片,而IPv6中只有 <br>
主机能将数据报分片,在路由器中如果数据报大小超过了路径MTU(两台主机的路径上最小 <br>
的MTU),则返回ICMPv6错误“packet too big”。 <br>
<br>
另外在关闭TCP连接时,主动关闭和被动关闭的主机所经历的状态是完全不同的。 <br>
主动关闭的主机会经历一个TIME_WAIT状态,此时该主机收到了被动关闭的 <br>
主机发来的FIN数据报,然后向被动关闭的主机发送ACK数据报,两个方向的 <br>
连接都要关闭了。但这时TCP还要等待一段时间,一般是2MSL(maximum <br>
segment lifetime),存在TIME_WAIT状态由两个原因: <br>
1)实现TCP连接的可靠性。例如,如果该ACK数据报丢失,则被动关闭的 <br>
主机会超时发送FIN数据报,这样该主机也能重发ACK数据报,保证链路正常关闭。 <br>
2)允许老的重复分组在网络中消失。当这两台主机又重新建立连接并且使用的端 <br>
口号也完全相同时,这样就可以防止前一个连接的数据报又在网络中出现。 <br>
<br>
OK,看书去啦! <br>
<br>
<br>
-- <br>
※ 修改:·clown 於 07月10日15:46:52 修改本文·[FROM: 202.114.1.60] <br>
※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 202.114.1.60] <br>
</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="54.htm">上一层</a>][<a href="59.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -