IO,Network,Protocol等等标记帖

这里都是一些感觉写的好或着写的明白的经典内容

IO
IO – 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
http://blog.csdn.net/historyasamirror/article/details/5778378

HTTP
深入理解HTTP协议(转)
http://www.blogjava.net/zjusuyong/articles/304788.html

TCP
位码即TCP标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
Sequence number(顺序号码) Acknowledge number(确认号码)

TCP状态表
CLOSED
LISTEN
SYN RCVD
SYN SENT
ESTABLISHED
FIN WAIT 1
FIN WAIT 2
TIME WAIT (双方均已断开)
CLOSING
CLOSE WAIT (被动关闭)收到对方关闭请求,并且已经确认
LAST ACK (被动关闭)等待最后一个关闭确认

建立连接过程
一般情况是服务端执行LISTEN原语进入LISTEN(被动打开)状态
客户端发出CONNECT命令,创建报文段(带SYN)并发送,进入SYN SENT状态
服务端收到一个SYN报文段,给客户端回应ACK同时发送一个SYN,进入SYN RCVD状态
客户端收到SYN+ACK报文段,并发送三次握手的最后一个ACK报文段,进入ESTABLISHED状态
服务端收到确认的ACK报文段,完成三次握手,进入ESTABLISHED状态

关闭连接过程
客户端执行CLOSE原语,创建报文段(带FIN)并发送,进入FIN WAIT 1状态
服务端收到一个FIN报文段,确认客户端的请求并回发一个ACK报文段,进入CLOSE WAIT状态
客户端收到服务端的确认ACK报文段,转移到FIN WAIT 2状态,此时从客户端到服务器方向的连接已经断开
服务端应用得到通告后,执行CLOSE原语,创建报文段(带FIN)并发送,进入LAST ACK状态
客户端收到FIN报文段并确认,进入TIME WAIT状态,此时双方连接均已经断开
但TCP要等待一个2倍报文最大生存时间(2MSL),确保。。。,到超时时间后,删除记录,进入CLOSED状态
服务端收到最后一个ACK报文段,释放连接,删除记录,进入CLOSED状态

http://www.cs.berkeley.edu/~kfall/EE122/lec23/sld001.htm
Three-way handshake
– A ——> Seq k, SYN ——> B
– A <--- Seq j, ACK k + 1, SYN + ACK <--- B - A ----> Seq k + 1, ACK j + 1, ACK —->

Four-way handshake
– A —- Seq k, ACK j + 1, FIN + ACK —-> B
– A <--- Seq j, ACK k + 1, ACK <--- B - ... sometime later ... - A <--- Seq j, ACK k + 1, FIN + ACK <--- B - A ---> Seq k, ACK j + 1, ACK —>

Wireshark真实抓包数据
三次握手

33	44.679312	192.168.1.102	58.215.40.94	TCP	53902 > smtp [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=3199582 TSER=0 WS=6
34	44.761376	58.215.40.94	192.168.1.102	TCP	smtp > 53902 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1440 TSV=1575891196 TSER=3199582 WS=7
35	44.761442	192.168.1.102	58.215.40.94	TCP	53902 > smtp [ACK] Seq=1 Ack=1 Win=5888 Len=0 TSV=3199602 TSER=1575891196

四次分手

181	279.133008	192.168.1.102	58.215.40.94	TCP	59658 > smtp [ACK] Seq=7 Ack=93 Win=5888 Len=0 TSV=3258195 TSER=1576125611
182	279.133545	58.215.40.94	192.168.1.102	TCP	smtp > 59658 [FIN, ACK] Seq=93 Ack=7 Win=5888 Len=0 TSV=1576125611 TSER=3258186
183	279.133630	192.168.1.102	58.215.40.94	TCP	59658 > smtp [FIN, ACK] Seq=7 Ack=94 Win=5888 Len=0 TSV=3258195 TSER=1576125611
186	279.264675	58.215.40.94	192.168.1.102	TCP	smtp > 59658 [ACK] Seq=94 Ack=8 Win=5888 Len=0 TSV=1576125739 TSER=3258195

http://blog.chinaunix.net/space.php?uid=20587912&do=blog&cuid=2201855
http://wenku.baidu.com/view/2fd4a6d126fff705cc170af3.html
OSI 7层协议
物理层
数据链路层
网络层
传输层
会话层
表示层
应用层

TCP 4层协议
网络接口层(ARP,RARP…)
网间层(ICMP,IP)
传输层(TCP,UDP)
应用层(SMTP,HTTP,FTP,DNS)