延迟确认与Nagle算法
这种方式其实是很低效的,因为一个包的TCP头和IP头至少就40字节,而携带的数据却只有一个字符.这就像快递员开着大货车去送一个小包裹一样浪费.
延迟确认并没有直接提高性能,它只是减少了部分确认包,减轻了网络负担.
和延迟确认一样,Nagle也没有直接提高性能,启用它的作用只是提高传输效率,减轻网络负担.
百家争鸣
慢启动算法
拥塞避免算法
Westwood: 在经常发生非拥塞性丢包的环境中(比如无线网络),Westwood最能体现出气优势
Vegas: 独辟蹊径,通过监控网络状态来调整发包速度,从而实现真正的”拥塞避免”
与别的算法相比, Vegas就像一位敏感、稳重、谦让的君子。我们可以想象当环境中所有发送方都使用Vegas时,总体传输情况是更稳定、更高效的,因为几乎没有丢包会发生。而当环境中存在Vegas和其他算法时,使用Vegas的发送方可能是性能最差的,因为它最早探测到网络繁忙,然后主动降低了自己的传输速度。这一让步可能就释放了网络的压力,从而避免其他发送方遭遇丢包。这个情况有点像开车,如果路上每位司机的车品都很好,谦让守规矩,则整体交通状况良好;而如果一位车品很好的司机跟一群车品很差的司机一起开车,则可能被频繁加塞,最后成了开得最慢的一个。
简单的代价 ----
UDP
<1>. UDP不像TCP一样在乎双方MTU的大小。 它拿到应用层的数据之后,直接打上UDP头就交给下一层了。那么超过MTU的时候怎么办?在这种情况下,发送方的网络层负责分片,接收方收到分片后再组装起来,这个过程会消耗资源,降低性能。一个32 KB的写操作,可能会根据发送方的MTU被切成23个分片。
<2>. UDP没有重传机制,所以丢包由应用层来处理。如某个写操作需要6个包完成。当基于UDP的写操作中有一个包丢失时,客户端不得不重传整个写操作(6个包)。相比之下,基于TCP的写操作就好很多,只要重传丢失的那1个包即可。
<3>. 分片机制存在弱点,会成为黑客的攻击目标。 接收方之所以知道什么时候该把分片组装起来,是因为每个包里都有“More fragments”的flag. 1表示后续还有分片, 0则表示这是最后一个分片,可以组装了。如果黑客持续快速地发送flag为1的UDP包,接收方一直无法把这些包组装起来,就有可能耗尽内存。
剖析CIFS协议
“前文介绍过一个文件共享协议,即Sun设计的NFS。理论上NFS可以应用在任何操作系统上,但因为历史原因,现实中只在Linux/UNIX上流行。那Windows上一般使用什么共享协议呢?它就是微软维护的SMB协议,也叫Common InternetFile System (CIFS). CIFS协议有三版本:SMB, SMB2和SMB3, 目前SMB和SMB2比较普遍。”
网络江湖
Linux和Windows上的共享协议之争
NFS vs CIFS
DNS小科普
- A (Address)记录: 从域名解析到IP地址。
- PTR记录:与A记录的功能相反,它能从IP地址解析到域名。PTR有什么作用呢?比如IT部门发现最近公司里的机器10.32.106.47和YouTube 之间数据流量很大,用nslookup一查PTR记录就知道原来是阿满在上班时间偷看视频了
- SRV记录:Windows的域管理员要特别关心SRV记录,因为它指向域里的资源。比如我想知道我们公司的域nas.com里有哪些DC,只要随便在一台电脑上查询_ldap._tcp.dc._msdcs.nas.com这个SRV记录就可以了。如果你也想查贵司的DC,请把nas.com改成正确域名即可。
- CNAME记录:又称为Alias记录,就是别名的意思。比如我的服务器 10.32.106.73同时提供网页(www)、邮件(mail)和地图(map)服务。那直接把10.32.106.73配给mail和map可以吗?当然是可以的,但如果某天 要改变这个IP地址,就不得不在DNS上修改www、mail和map这3项记录了。而在使用别名的情况下,只要修改www一项的IP就行了,mail和map都没有必要改动。别名的使用节省了管理时间,站长们应该会喜欢这个功能。
- 递归查询
- 迭代查询
DNS的缺点:
- 就像雕牌洗衣粉被周佳牌模仿一样,DNS上也存在山寨域名。比如招商银行 的域名是www.cmbchina.com,但是www.cmbchina.com.cn和www.cmbchina.cn 却不一定属于招行。如果这两个域名被指向外表和招行一样的钓鱼网站,就可能会骗到部分用户的银行账号和密码。
- 如果DNS服务器被恶意修改也是很危险的事情。比如登录招行网站时虽然 用了正确域名www.cmbchina.com,但由于DNS服务器是黑客控制的,很可能解析到一个钓鱼网站的IP
- 即便是配了正规的DNS服务器,也是有可能中招的。比如正规的DNS服务器遭遇缓冲投毒- 之后,也会变得不可信。
- NS除了能用来欺骗,还能当做攻击性武器。著名的DNS放大攻击就很让人头疼。利用这个放大效应,黑客只要控制少量电脑就能把一个大网站拖垮了.
一个古老的协议 ----
FTP
FTP是用明文传输的,如果对安全要求非常高,就不能采用这种方式
主动模式与被动模式
上网的学问 —- HTTP
This is for everyone
英国人不但借此传播了开放和分享的互联网精神,也展示了其在IT历史上的地位----
从奠定现代计算机基础的 Alan Turing,到发明分组交换的 Donald Davies,再到万维网之父 Tim Berners—Lee,每一个重大环节都有英国人的参与。
Tim所实现的HTTP便是我们今天浏览网页所用的网络协议。他当年建立的网站至今还能访问,域名为http:/info.crm.ch,虽然这个页面已经更新过,但我们还可以在http//www3.org/Histor/1992110—ypertexthypertext/wwW/News/9201.html看到当年的内容。
解密https的包:
Edit->Preferences->Protocl->SSL->RSA key list.
解密所用的密钥只能在服务器端导出
无懈可击的Kerberos
‘在古希腊神话中,冥界的大门由一头烈犬看守。此犬长有三个头,兢兢业业地守在冥河边,从没有灵魂能在它醒着的时候逃离。这头烈犬就是Kerberos,安全守卫的象征。古希腊人下葬时要放好蜜饼,就是为了讨好它。现代游戏里也有它的英姿,比如《英雄无敌》里以一敌多的地狱烈犬。
这篇要介绍的身份认证协议也叫Kerberos,它有着非常广泛的应用,比如Windows域环境的身份认证就会用到它。我们用域账号登录电脑,就在不知不觉间完成了一次Kerberos认证过程。
Kerberos的认证结果是双向的----
当账号A访问资源B时,不但B要确保A并非冒充,而且A也要查明B不是假货。我们一般只知道前者,比如前文提到的CIFS服务器就要在Session Setup中对造访者验明正身。后者则很少被提及,因为人们一般不会怀疑自己要访问的资源是假的。其实后者还是很有必要的,举一个例子:如果你老板伪造了一台网络打印机,但是你没法确认它的真假,就可能把求职信打到他办公室里去,然后就真的得出去求职了。西游记中其实也出现需要相互认证的场景,比如如来佛祖要认出假冒的访问者六耳猕猴,唐僧师徒也要识别山寨的“资源”小雷音寺。
双向认证的方式不止一种,最简单的做法是互报密码。这个过程就像电影中用暗号接头。A说:“江南风光好”, B说:“遍地红花开”。如果双方都核对无误,就可以激动地握手“同志,我可找到你了!”假如其中一方报错暗号,则接头失败。这种方式的弊端很多,最大的问题是不方便管理。比如在一个数百名员工共享几百台机器的环境中,当新加入一名员工时,就得在几百台机器上更新账号信息。相信没有管理员能忍受这样的环境。’
TCP/IP的故事
一开始这两个协议并没有分层,而是合在一起
TCP/IP的设计非常成功。30年来,底层的带宽、延时,还有介质都发生了翻天覆地的变化,顶层也多了不少应用,但TCP/IP却安如泰山。它不但战胜了国际标准化组织的OSI七层模型,而且目前还看不到被其他方案取代的可能。第一代从事TCP/IP工作的工程师,到了退休年龄也在做着朝阳产业。
令人费解的是,现在的大学课程还在介绍OSI七层模型。因为OSI模型的层数太多,很多学生根本理解不了,甚至连顺序都记不住。于是老师们就用“All People Seem To Need Data Processing”来帮助记忆,因为这7个单词的首字母和OSI模型每一层的首字母是一样的。大学的应试教育由此可见一斑。
‘到今天,OSI模型几乎名存实亡了,它对我们的影响只停留在还没来得及更新的教科书上’
可能是唯一篇无关技术的RFC:
rfc2468 -I REMEMBER IANA
举重若轻
“一小时内给你答复”
NAT(Network Address Translation)
Life is tough,but Wireshark makes it easy.
午夜铃声
乱序导致了重传,从而影响了性能
真的和探案一样…
深藏功与名
一般存储设备都是读比写快
一般存储端的带宽大,客户端的带宽小。读文件时数据从大带宽进入小带宽,就如同大河水流入小河,有可能会溢出(表现在网络上就是拥塞)而导致性能问题。写文件时方向相反,所以拥塞概率低,性能就会好一些
棋逢对手
NFS网络锁管理器(NLM)
学无止境
➜ ~ tshark -h:
TShark (Wireshark) 2.4.3 (v2.4.3-0-g368ba1e) Dump and analyze network traffic. See https://www.wireshark.org for more information. Usage: tshark \[options\] ... Capture interface: -i <interface> name or idx of interface (def: first non-loopback) -f <capture filter> packet filter in libpcap filter syntax -s <snaplen> packet snapshot length (def: appropriate maximum) -p don't capture in promiscuous mode -I capture in monitor mode, if available -B <buffer size> size of kernel buffer (def: 2MB) -y <link type> link layer type (def: first appropriate) -D print list of interfaces and exit -L print list of link-layer types of iface and exit Capture stop conditions: -c <packet count> stop after n packets (def: infinite) -a <autostop cond.> ... duration:NUM - stop after NUM seconds filesize:NUM - stop this file after NUM KB files:NUM - stop after NUM files Capture output: -b <ringbuffer opt.> ... duration:NUM - switch to next file after NUM secs filesize:NUM - switch to next file after NUM KB files:NUM - ringbuffer: replace after NUM files Input file: -r <infile> set the filename to read from (- to read from stdin) Processing: -2 perform a two-pass analysis -M <packet count> perform session auto reset -R <read filter> packet Read filter in Wireshark display filter syntax (requires -2) -Y <display filter> packet displaY filter in Wireshark display filter syntax -n disable all name resolutions (def: all enabled) -N <name resolve flags> enable specific name resolution(s): "mnNtCd" -d <layer\_type>==<selector>,<decode\_as\_protocol> ... "Decode As", see the man page for details Example: tcp.port==8888,http -H <hosts file> read a list of entries from a hosts file, which will then be written to a capture file. (Implies -W n) --enable-protocol <proto\_name> enable dissection of proto\_name --disable-protocol <proto\_name> disable dissection of proto\_name --enable-heuristic <short\_name> enable dissection of heuristic protocol --disable-heuristic <short\_name> disable dissection of heuristic protocol Output: -w <outfile|-> write packets to a pcap-format file named "outfile" (or to the standard output for "-") -C <config profile> start with specified configuration profile -F <output file type> set the output file type, default is pcapng an empty "-F" option will list the file types -V add output of packet tree (Packet Details) -O <protocols> Only show packet details of these protocols, comma separated -P print packet summary even when writing to a file -S <separator> the line separator to print between packets -x add output of hex and ASCII dump (Packet Bytes) -T pdml|ps|psml|json|jsonraw|ek|tabs|text|fields|? format of text output (def: text) -j <protocolfilter> protocols layers filter if -T ek|pdml|json selected (e.g. "ip ip.flags text", filter does not expand child nodes, unless child is specified also in the filter) -J <protocolfilter> top level protocol filter if -T ek|pdml|json selected (e.g. "http tcp", filter which expands all child nodes) -e <field> field to print if -Tfields selected (e.g. tcp.port, \_ws.col.Info) this option can be repeated to print multiple fields -E<fieldsoption>=<value> set options for output when -Tfields selected: bom=y|n print a UTF-8 BOM header=y|n switch headers on and off separator=/t|/s|<char> select tab, space, printable character as separator occurrence=f|l|a print first, last or all occurrences of each field aggregator=,|/s|<char> select comma, space, printable character as aggregator quote=d|s|n select double, single, no quotes for values -t a|ad|d|dd|e|r|u|ud|? output format of time stamps (def: r: rel. to first) -u s|hms output format of seconds (def: s: seconds) -l flush standard output after each packet -q be more quiet on stdout (e.g. when using statistics) -Q only log true errors to stderr (quieter than -q) -g enable group read access on the output file(s) -W n Save extra information in the file, if supported. n = write network address resolution information -X <key>:<value> eXtension options, see the man page for details -U tap\_name PDUs export mode, see the man page for details -z <statistics> various statistics, see the man page for details --capture-comment <comment> add a capture comment to the newly created output file (only for pcapng) --export-objects <protocol>,<destdir> save exported objects for a protocol to a directory named "destdir" Miscellaneous: -h display this help and exit -v display version info and exit -o <name>:<value> ... override preference setting -K <keytab> keytab file to use for kerberos decryption -G \[report\] dump one of several available reports and exit default report="fields" use "-G help" for more help