学习 《UNIX网络编程》
学习本书之前,为了了解C语言,先通读了《C程序设计语言》。但对C语言的理解、熟悉可能还是不足,所以在学习本书的过程中,遇到看不懂的C代码,还要去查询、思考。
本书一开始,我就遇到了问题,运行不了程序。不知道在 MACOS 上面应该怎么编译并使其运行。所以学习编译并运行C代码。
OK,现在我们知道如何编译并运行文件了。
第一章
练习
1.3
socket error: Address family not supported by protocol family
1.4
在 while 函数体首行中添加
++bigger_than_zero_times;
1.5
for (int i=0; i<sizeof(buff); ++i) {
Write(connfd, &buff[i], strlen(&buff[i]));
}
输出是这样
$ ./daytimetcpcli 127.0.0.1
Tue May 30 21:12:38 2017
ue May 30 21:12:38 2017
e May 30 21:12:38 2017
May 30 21:12:38 2017
May 30 21:12:38 2017
ay 30 21:12:38 2017
y 30 21:12:38 2017
30 21:12:38 2017
30 21:12:38 2017
0 21:12:38 2017
21:12:38 2017
21:12:38 2017
1:12:38 2017
:12:38 2017
12:38 2017
2:38 2017
:38 2017
38 2017
8 2017
2017
2017
017
17
7
还有乱码
有错误。我是想输出一个字符,而实际输出的是 i 之后的所有字符。原因是 strlen(&buff[i]) 这里写了输出的长度。这里改为 1 就正常了。
sizeof 要改成 strlen
所以答案是
for (int i=0; i<strlen(buff); ++i) {
Write(connfd, &buff[i], 1);
}
第二章
2.1 进入 https://www.iana.org/ 后没有找到 IPV0, IPV1的信息
参考答案:
在站内搜索 Version Numbers
Decimal ![]() |
Keyword ![]() |
Version ![]() |
Reference ![]() |
---|---|---|---|
0-1 | Reserved | [Jon_Postel][RFC4928] | |
2-3 | Unassigned | [Jon_Postel] | |
4 | IP | Internet Protocol | [RFC791][Jon_Postel] |
5 | ST | ST Datagram Mode | [RFC1819][Jim_Forgie] |
6 | IPv6 | Internet Protocol version 6 | [RFC-ietf-6man-rfc2460bis-13] |
7 | TP/IX | TP/IX: The Next Internet | [RFC6814] |
8 | PIP | The P Internet Protocol | [RFC1621] |
9 | TUBA | TUBA | [RFC1347] |
10-14 | Unassigned | [Jon_Postel] | |
15 | Reserved | [Jon_Postel] |
2.2 直接google搜索咯。
IPv5 used IPv4's 32-bit addressing, which eventually became a problem. The format of IPv4 addresses is one you have probably encountered before, in the ###.###.###.### format. Unfortunately, IPv4 is limited in the number of addresses available, and by 2011 the last remaining blocks of IPv4 addresses were allocated. IPv5 would have suffered from the same limitation.
However, IPv6 was developed in the 1990s to solve the addressing limitation, and commercial deployment of this new internet protocol began in 2006.
So, IPv5 was abandoned before ever becoming a standard, and the world moved on to IPv6.
参考答案:通过 RFC-INDEX 查找或者 google "ipv5 rfc"
在 RFC-INDEX 中没有找到 IPV5,应该是关键字不对
2.3
发送最小的包的大小,这样所有的线路都能够支持。
MTU:最大传输单元
MSS:最大分节大小,用于向对端TCP通告对端在每个分节中能够发送的最大TCP数据量。MSS经常设置成MTU减去IP和TCP首部的固定长度
最小重组缓冲区大小:IPv4和IPv6的任何实现都必须保证支持的最小数据报大小。对于IPv4是576字节,对于IPv6是1500字节。
所以 536 = 576 - 20(IPv4首部) - 20(TCP首部)
2.4
与书上的图一样吧。但是 26 个字节的作用是什么?说明数据传输的次数?
参考答案:这里执行关闭的是服务器而不是客户
2.5
以太网的MTU是1500字节。TCP 首部 + IP 首部 = 20 + 20 = 40字节;所以不能超过1500-40=1460字节
2.6
OSPF 的协议号 -》 OSPF protocol number
进入 https://www.iana.org/, 搜索 Protocol Numbers,进入 https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml,页面内搜索OSPF,得到
89 | OSPFIGP | OSPFIGP | [RFC1583][RFC2328][RFC5340][John_Moy] |
所以协议号是 89
2.7
累计确认点
选择性确认点
第三章
习题
3.1
由于C中函数不能改变按值传递的参数的值。而这里又需要更改参数的值,所以必须传递指针。
3.2
void 类型指针的作用
因为结果就是 char 类型,所以使用 char 类型的指针
参考答案:
void指针间接引用前需要声明类型/类型转换。
3.3
如果函数出错将返回一个负值,并将errno设置为EAFNOSUPPORT,如果参数af指定的地址族和src格式不对,函数将返回0。
意思是:更严格的函数报错了,就调用更宽松的函数。
第四章
服务器已连接套接字
已完成队列中储存的不是已连接的套接字吗?
Fork 与 并发服务器
我认为Fork 之后连接应该还是 1 个吧?只是 connfd 的引用计数加一。
但是书上画了两个连接。
习题
是大端则为主机字节序。
如何判断大端
void IsBigEndian()
{
short int a = 0x1122;//十六进制,一个数值占4位
char b = *(char *)&a; //通过将short(2字节)强制类型转换成char单字节,b指向a的起始字节(低字节)
if( b == 0x11)//低字节存的是数据的高字节数据
{
//是大端模式
}
else
{
//是小端模式
}
}
参考答案:
使用 getsockname 以及 sock_ntop 的方法。
子进程在父进程前执行完。那么子进程 close 之后,已连接套接字的引用计数减一,即 2 - 1 = 1 个。然后父进程调用 close,引用计数减一后变为 0。那么就关闭套接字,出发 TCP 的 FIN 以进行资源回收。
4.4 由于没有调用 listen,所以套接字还是主动套接字,所以不能接收到请求。客户端连接到那个端口后会发现没有应用程序在监听那个端口,会受到服务器的 RST 响应。
参考答案:
4.5 没有 bind,那么内核会随机绑定一对 IP 地址、临时端口给那个套接字。调用 listen 后,服务端正常监听,可以正常工作。但是需要查询才能获得服务端的IP 地址、端口号。
学习 《UNIX网络编程》的更多相关文章
- 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 一
1. Linux的档案权限与目录配置 一.基础知识: a.分为三类,拥有者(owner).群组(group).其他人(other) b.三个核 ...
- 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 四 档案的文件系统的压缩和打包
1.压缩文件案的用途与技术 a.用途,简单来说,就是节约磁盘空间.如果从传输角度讲,占用宽带也会小很多(Apache就有自动压缩的功能,节省宽带资源,提升网站的输出能力) b.压缩技术 ...
- 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 三 Linux磁盘与文件系统管理
一.认识EXT2文件系统: a.硬盘的组成:转动小马达+存储的磁盘+读写的机械臂 b.磁盘的一些概念 扇区为最小的物理储存单位,每个扇区为512B ...
- 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 二
Linux档案与目录管理 1.一些比较特殊的目录,需要用力的记下来 . 代表当前层目录 .. 代表上一层目录 - 代表前一个工作目录 (这个好屌!其他的 ...
- 《鸟哥的Linux私房菜--基础篇》学习
第四章 显示日期与时间的指令:date 输入: (base) liyihuadeMacBook-Pro:~ liyihua$ date 输出: Thu Jun 6 08:44:02 CST 2019 ...
- 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录
目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历) ...
- 每周一书-《鸟哥的Linux私房菜基础学习篇(第四版)》台湾原版,你想要吗?
首先说明,本周活动有效时间为2016年10月19日到2016年10月31日. 目在介绍这本书之前,首先要感谢QQ号为:1084830483(路在远方),来自哈尔滨工程大学的同学赠送给玄魂工作室的 ...
- 【Linux】鸟哥的Linux私房菜基础学习篇整理(一)
最近,一直在写PPC的模拟器和汇编器,也在做设计.所以重新看了看<鸟哥的Linux私房菜>,还是有好多命令不太熟悉.就打算写几篇blog记下来. 1. nl [-bnw] filename ...
- 《鸟哥的Linux私房菜-基础学习篇(第三版)》(三)
第2章 Linxu怎样学习 1. Linux当前的应用角色 当前的Linux常见的应用可略分为企业应用和个人应用双方面. 首先谈了企业环境的利用. 1)网络server. 2)关键任务 ...
- 鸟哥的Linux私房菜 基础学习篇读书笔记(9):Linux磁盘与文件系统管理(2)
上一篇文章主要从理论上分析了Linux的Ext2文件系统.这一篇主要解说怎样查看Linux的文件系统的容量以及解说Linux文件系统中的连接文件. 能够通过df和du命令来查看磁盘与文件夹的容量.df ...
随机推荐
- CSS/JavaScript hacks,browserhacks使用
1.网址 http://browserhacks.com/ 2.使用 (1)JavaScript Hacks 浏览器js判断 (2)条件注释hack (3)Media Query Hacks 媒体查询 ...
- Spring HibernateTemplate
HibernateTemplate利用模板设计模式,可将重复的opensession getcurrentsession工作省去,只将必要操作执行即可,其它的由spring来帮我们处理. < ...
- nginx只允许域名访问,禁止ip访问
背景:为什么要禁止ip访问页面呢?这样做是为了避免其他人把未备案的域名解析到自己的服务器IP,而导致服务器被断网,我们可以通过禁止使用ip访问的方法,防止此类事情的发生. 解决方法:这里介绍修改配置文 ...
- 【MyBatis学习13】MyBatis中的二级缓存
1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的.为了更加 ...
- C# NPOI操作Excel(下)
根据自己项目需求编写,仅供参考 个人建议:使用Excel模板进行导出操作.尽量避免自己生成Excel(既繁琐又容易出BUG).大多情况下导出Excel都是固定格式,使用模板导出会方便很多. publi ...
- JavaScript-2.4 改进的Hello程序,使用div,---ShinePans
<html> <head> <meta http-equiv="content-type" content="text/html;chars ...
- ie6、ie7下JSON.parse JSON未定义的解决方法
解决方法一: var jsons = req.responseText; var s; if (typeof(JSON) == 'undefined'){ s = eval("(" ...
- 在训练CNN时,loss稳定在log(类别数)
参见知乎问题! https://www.zhihu.com/question/275774218 很多框架都会有一个问题,当卷积 weight NaN 之后,卷积的 output 会变成 NaN.然后 ...
- CSS3 :nth-child()伪类选择器
CSS3 :nth-child()伪类选择器 CSS3的强大,让人惊叹,人们在惊喜之余,又不得不为其艰难的道路感到可惜:好 的标准只有得到行业浏览器的良好支持才算得上“标准”.CSS3标 准已提出数年 ...
- 关于public class
初学问题:“The public type movietestdive must be defined in its own file” 对于一个class里,只能出现一个public class(公 ...