《UNIX网络编程》读书笔记1---简介和TCP/IP

这本书我不打算读完,因为很多细节更倾向于用库去封装,对于原理的东西更感兴趣,

所以我有兴趣研究一下本书的IO的认识,还有TCPv1以及UNP2

主要打算阅读的部分包括,

第一部分 第1,2章。

第二部分 第3-11章,而且非TCP部分我也想到用时再查看。重点关注I/O复用。

第三部分 任意选读。


本帖是记录简介以及TCP/IP基础的。

1.UNIX两大主要分支

2.列出一些网络命令

3.分析TCP连接建立与关闭为什么需要3,4次交互。

4.分析了CSAPP里面弹射客户端的一个bug

1.UNIX两大主要分支

BSD---Berkery Software Distribution     BSD是UNIX衍生系统,90年代很大程度上被System V4.x取代。

SVR4---System V Release4   也是UNIX的衍生系统

2.一些网络命令

netstat

ifconfig

ping

traceroute

tcpdump

ipconfig(适用于Windows)

3.TCP连接建立与关闭为什么要3次与4次交互


TCP三次握手,握的是什么东西,握的就是SYN后面那个序号,它告诉对端,和自己开始通信的字节都有编号,最开始的编号是多少。




为什么在TCP连接关闭的时候,通常是要4次交互,为什么不能像连接建立一样,把图中ACK M+1和FIN n合并为一个分节传输。

我们先来讨论FIN的意思:对于发送端表示,我这边应用层已经没有额外数据要传输了。

对于接收端表示,应用程序在相应连接上再无额外数据可接收。

而FIN发生的条件有三:

①调用close或者shutdown函数

②exit或者从main函数return进程结束

③进程被信号终止

那从图中可以看到,首先ACK M+1信息是对于上一条消息的ACK是必须要发生的,如果在我的ACK发送之前还有信息要发送可能会和ACK一起发送。

但是再看这个FIN,它是由于这边调用了close函数才发生的,而这个close函数的调用,也许会经过read函数返回后进行一些额外处理才调用,并不存在与ACK很近的时间关系,所以也就只好额外弄一个TCP分节发送FIN消息了。

4.csapp里面echoclient的一个bug

所用的程序为CSAPP P631的echoclient.c,echoserveri.c,echo.c

这个bug主要是在client上面,主要表现为:

这里的这个server是回射的,建立连接后client发送什么,server就回复什么,然后client再从server读取回复的信息,并显示。

client与server建立连接以后,如果用信号杀死server进程,client这个时候发送一个消息,这个消息居然会被回复,然后client在下一次输入后,退出进程。


显然,当server进程被杀死后,是不可能会回复client发送的信息的。

仔细观察echoclient.c的代码之后,发现如下这一段。

while(Fgets(buf, MAXLINE, stdin) != NULL)

{

         Rio_writen(clientfd, buf, strlen(buf));

         Rio_readlineb(&rio, buf, MAXLINE);

         Fputs(buf, stdout);

}

问题就出在这个buf上面,这整个循环的功能就是,先Fputs()从用户读入信息,Rio_writen向server写读入的信息,然后Rio_readlineb从server读取,然后Fputs显示出来。

这里面,不管是发送的信息还是收到的信息都是用buf来暂存的,所以如果最后没有从server读到信息,就会显示出自己发送的信息。

就会出现这个bug。


当然这里面涉及到复杂的,server进程突然终止了,整个TCP连接是如何发展的。

这在UNP1后面的章节中有专门讲到,到时候,我将补充这个话题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值