《高级TCP/IP编程》章节试读

当前位置:首页 > 计算机网络 > 网络与数据通信 > 高级TCP/IP编程章节试读

出版社:中国电力出版社
出版日期:1-1
ISBN:9787508306612
作者:(美)Jon C.Snader
页数:302页

《高级TCP/IP编程》的笔记-第80页

如果应用程序只是在写数据而不在读数据,就无法感知收到的FIN包(通常通过read返回0来表现)。下一个写会收到对等端的RST(通过read返回-1, 设置相应errno为ECONNRESET来表现);如果RST了还要2B地继续写,本地系统就会用SIGPIPE来阻止你;如果执着地忽略该信号,那么下一个read或write都会返回-1并伴随errno被设置为EPIPE——过去程序中很多错误都源自于此

《高级TCP/IP编程》的笔记-第278页

raw套接字接受任何内核不能识别协议类型的IP数据包(比如大多数ICMP消息和所有的IGMP消息)

《高级TCP/IP编程》的笔记-第175页

泪流满面,大二时做老猫的项目时缺的就是这样一个事件驱动模型+定时器列表,当时死也写不出来这样一个简单的框架

《高级TCP/IP编程》的笔记-第250页

traceroute原理:要求每个中间路由向源主机发送一个ICMP错误消息来决定两个主机间的路径
具体:
1. 利用IP包头的TTL域,分别发TTL为1、2、3……的包,中间路由如果发现TTL为1就会丢弃该包并向源主机发送ICMP错误消息
2. IP包中的载荷为UDP包,使用一个不会被应用程序使用的端口(怎么保证?),到达目的主机后,主机会返回“ICMP端口不可达”消息,由此可知包已经达到,无需继续
3. 由于UDP不可靠,所以对每个TTL值都发送多次(默认为3)
PS:windows中的tracert工具略有不同,它使用icmp echo request(ping探询)而不是UDP,所以目的主机返回的是icmp echo response 而不是“icmp端口不可达”

《高级TCP/IP编程》的笔记-第189页

TIME-WAIT状态是为了:1.正确响应被动方重发FIN包,从而是双方通信正常顺序关闭 2. 避免延时数据“凑巧”污染新的连接。 TIME-WAIT只有主动方进入,因为主动关闭(发送FIN)说表明这一方不会再发送数据。被动方没有上述两点之虞

《高级TCP/IP编程》的笔记-第227页

为UDP使用connect有好处 :1. 性能(避免sendto连接再断开套接字的反复开销) 2. 是用connect后PCB会保存发出过的包头,可以用来识别“ICMP端口不可达”回应

《高级TCP/IP编程》的笔记-第161页

tcp写操作的错误大多数情况下是通过“下一个读”来感知的。因此应用中有时需要“降格”成单工连接,另一半用来控制连接状态

《高级TCP/IP编程》的笔记-第71页

不要在应用程序中重复实现TCP的功能(TCP本身是更好的选择),这样不会获得更高的效率——由于重发等操作引起的上下文切换开销会很大(而TCP本身就运行在内核态)。另一个原因是让应用程序看到重发行为是不好的选择(比如银行转账时)。PS:当年网络课的project似乎做的就是在应用层面模拟TCP的可靠传输……

《高级TCP/IP编程》的笔记-第260页

lsof可以查出套接字在被那个程序使用

《高级TCP/IP编程》的笔记-第244页

SOCK_PACKET可以直接触及数据链路层,SOCK_RAW可以触及网络层,是这个意思?

《高级TCP/IP编程》的笔记-第51页

“TCP是一个流协议,没有内在的消息或消息边界的概念”,是指没有“用户可见”的数据包,虽然下层仍然由ip包承载……当年网络学得不好,这个概念很久之后才理解,误了不少事

《高级TCP/IP编程》的笔记-第69页

TCP在实验中通过合理设置缓冲区和发送段大小而在loopback和LAN上取得了比UDP更高的效率,是由于TCP的“粘包”效应。UDP不会粘包因为其有明确的报文分界

《高级TCP/IP编程》的笔记-第50页

套接字和XTI的故事再次告诉我们,事实标准才是王道

《高级TCP/IP编程》的笔记-第81页

对等方主机崩溃和应用程序崩溃行为不同:前者不再会响应TCP(不会用FIN通知你),你只能坐等超时(错误号ETIMEOUT);如果超时之前对等方主机重启了(坑爹),那么你在重发包给他,他会返回RST

《高级TCP/IP编程》的笔记-第294页

摔倒,第41条是读Rich Stevens的书……


 高级TCP/IP编程下载


 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024