TCP 传输是保证到达和按顺序的。 UDP的话是不保证一定传到也不保证顺序。 那为什么还要用UDP? 因为有一些实时的,比如直播。 某一个Frame的丢失其实无所谓,用TCP的话保证到底和顺序也许会卡屏。
然后TCP是Bi-directional的,each independent.
Flags那个格子表示到底是ACK, SIN 还是什么。
HdrLen表示整个header的size是多少,这样才知道怎么read options那个field。
sequence number: random generated, 表示 First byte of data!
Acknowledge number: Next Expected Byte.
Handshake: 建立connection
如果Attacker知道Ports 和 Sequence number, 他可以inject data. 如果attacker 可以see TCP traffic的话,就能看到port 和 seq numbers.
他可以fake server的data,然后发送过来给client。 由于他到达速度会比server的还快。client会接到wrong data。
即便Attacker看不到TCP traffic,还是可以猜一下port和seq number
总结:
在TCP之上再加一层加密的protocol:
SSL/TLS是用对称加密! 双方有same key. 两种办法把这个key 共享
1. RSA加密
2. Diffie Hellman
另一种方法:
RSA容易screw up。如果你不小心泄露了Private Key 就完蛋了。
所以TLS用Diffie/Hellman. By the way, TLS = SSL.
交换supported protocol:
如果有中间人, 他可以做到Drop掉他想drop的加密protocols in ClientHello message.但是在finished part of TLS, TLS会verify integrity of handshake. 服务器与客户端互换用MAC加密过的prior dialog。所以中间人还必须break Mac.
负责网站certificate 的private key的意义。
如果你拥有他 你就可以山寨一个网站出来 别人想确认是不是的时候 那个key可以用来create fake certificate.
Syn攻击: