一大波 Linux 学习笔记来啦

楼主是去年参加的校招,已经拿到 offer(baidu) 啦,现在分享一波学习笔记,希望能帮到做 C/C++/Linux 后台的同学,当然其他方向的同学有兴趣,也可以学习下啦!

希望同学们点进去后,最好能关注一下……^_^

然后,这里有一个学习交流群:610441700,喜欢 Linux 的同学可以加进来哟。

偷偷告诉你,群里有萌妹子 Linus 等你来调戏哦!

相关资源

一、保护模式

http://blog.csdn.net/column/details/15102.html

操作系统基本内功,是 Linux 内核学习的基础

二、多线程切换原理及其手工实现

http://blog.csdn.net/column/details/15084.html

让你在不掌握内核的情况下,快速学习到线程到底是怎么实现的。这一系列笔记教你从 0 到 1 写出一个用户级线程框架。

三、Unix/Linux 环境编程

博客专栏:http://blog.csdn.net/column/details/15043.html

文章目录:http://blog.csdn.net/q1007729991/article/details/52770103

耗时 7 个月完成的笔记,呕心沥血啊!每一篇都花了很大心血。

四、Unix/Linux 网络编程(正在更新)

博客专栏:http://blog.csdn.net/column/details/15153.html

文章目录:http://blog.csdn.net/q1007729991/article/details/69091877

学习网络编程的必备知识,现在正在更新 TCP 部分。


滑动窗口协议

在上一文中我们已经介绍了滑动窗口的基本概念,以及它的目的。本文我们就亲自动手实践一下。

1. 环境准备

Git 地址:https://git.oschina.net/ivan_allen/unp.git

  • 服务器:unp/protocol/tools/tcpserver/sink_serv.c,部署在 Linux 上。
  • 客户端:/home/allen/unp/protocol/tools/winclient/sink_client.cpp,部署在 Windows 上。

服务器之所以叫 sink_serv,是因为它就是个黑洞,它接收到数据后就直接扔了,即石沉大海了(实际上,代码中将接收到的数据打印在屏幕上了)。服务器每隔 500 毫秒从接收缓冲区读一次数据,一次最多读 1024 字节。

客户端每次向服务器发送 1024 字节的数据,本质上是向自己的发送缓冲区写入 1024 字节数据。连续发送 count 次,count 可以通过命令行参数指定。

2. 实验

  • 启动服务器

这里写图片描述 图1 服务器启动

从图 1 中我们看到服务器最后一个启动参数是 4096,它表示将接收缓冲区大小设置为 4096. 然而,内核在设置缓冲区大小的时候,会把缓冲区大小设置为这个值的 2 倍(具体原因请参考 man 手册),因此可以看到第 4 行打印 actual recvbufsize:8192.

  • 在 windows 上打开 OmniPeek 准备抓包,同时启动客户端
sink_client.exe 192.168.80.129 8000 8

参数 8 表示客户端连续发送 8 次数据,每次 1024 字节。

3. 抓包结果

这里写图片描述 图2 OmniPeek 抓包结果

这里写图片描述

图3 时序图

在时序图中,ACK n 表示对序号为 n 的 TCP 段进行确认。

这里写图片描述

图4 滑动窗口分析

图 4 中,我们用绿色表示发送方,蓝色表示接收方加送的信号。在一开始的时候,接收方通告了一个大小为 2920 大小的窗口,接下来发送方发送了 4 号报文,大小为 1024 B,然后接收方确认了 4 号报文,并通告了一个大小为 2920 大小的窗口。后面依此类推。

4. 总结

  • 掌握滑动窗口的工作原理

最后再次强调一下,学习滑动窗口,我们假设网络是理想的,不拥塞,只要发了数据,对方一定能收到。

#百度##C++工程师#
全部评论
支持
点赞 回复 分享
发布于 2017-04-12 16:14
支持
点赞 回复 分享
发布于 2017-04-12 17:51
谢谢 已收藏
点赞 回复 分享
发布于 2017-04-12 18:04
请问楼主想了解函数调用时,栈帧怎么变化(esp,ebp指针),应该看哪本书,网上搜到的东西各式各样,想看点靠谱的
点赞 回复 分享
发布于 2017-04-12 18:14
233333333,牛逼,果断收藏了!
点赞 回复 分享
发布于 2017-12-29 10:50

相关推荐

比亚迪汽车新技术研究院 硬件工程师 总包21左右 硕士
点赞 评论 收藏
分享
11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
粗心的雪碧不放弃:纯学历问题,我这几个月也是一直优化自己的简历,后来发现优化到我自己都觉得牛逼的时候,发现面试数量也没有提升,真就纯学历问题
点赞 评论 收藏
分享
点赞 评论 收藏
分享
18 256 评论
分享
牛客网
牛客企业服务