本文仅仅为了便于了解,做十分广泛的描绘,遣词不甚谨慎,不当之处还望纠正,感谢。 看本文章之前,主张对OSI模型现已TCP/IP不太了解的同学们,看看我之前写的 文言解说 OSI模型,TLS/SSL 及 HTTPS
悉数为了传输 UDP vs TCP
互联网之所以巨大的原因之一是处理了远距离牢靠传输信息的问题,已然要进行“相互”传输数据那么肯定是有必定的规矩和协议的,TCP和UDP便是两种广泛应用的传输协议,在这儿做一个简略的比较:
UDP (你把它幻想成平邮函件),往往邮递员会会集把函件放在邮局,比方一个校园的邮政,可是这种方法不牢靠啊,由于这种平邮的函件老是简单“丢包”,也便是说,这种传输方法无法确保收件人必定能收到函件。
这不可啊,所以,人们就想到了一种更为牢靠的传输方法:
TCP(你把它幻想成快递),快递员可以直接送货上门,即便不送货上门,可要给你打电话,查看你的身份证,让你签字等等,确保你的包裹不会被丢掉。所以,这种方法更“牢靠”。
TCP vs UDP 谁更牢靠
上面的比方也现已很清楚的看到,TCP(快递)之所以牢靠,是由于有种种的“查看”机制,当快递的“包裹”真实抵达收件人手里的时分,这个”传输“进程才算完结,不然快递小哥就“从头投递“。那么”UDP“(平邮函件)就不论这一套,横竖依据函件上的地址把”传输的函件包“扔在最近的邮件或许上面所写的信箱中就完事,至于随后包裹究竟到没到收件人手中,这个UDP不论了。
所以,到现在,咱们知道了,TCP传输数据比udp愈加“牢靠”!
TCP存在之于”互联网“的含义
咱们现在能在互联网上看文章,直播,视频,文娱,购物,乃至网上转账,当然,看直播的话,UDP协议仍是不错滴,可是,假如涉及到金钱或许敏感数据,假如都像没有一套“牢靠”的传输协议,谁还敢在网上“转账”,“存储信息”呢?
咱们现已知道了,TCP存在的含义之一便是: ”牢靠的传输“ ,但一起要进行长途通讯, ”高效的传输“ 是必不可少的,最终,数据包在混沌险峻的互联网中络绎, ”安全的传输“ 是有必要的。
所以,小结一下,TCP存在之于”互联网“的含义有三点(重要的工作说三遍): – 让数据进行”牢靠“,”高效“,”安全“的传输 – 让数据进行”牢靠“,”高效“,”安全“的传输 – 让数据进行”牢靠“,”高效“,”安全“的传输
请注意:这儿所说的”高效”仅仅相对TCP自己而言,由于这个”高效“会和后边咱们会提到三次握手其间的第二步兼并的握手相关,所以我在这儿提一下,其实,UDP会由于没有了一些检测机制会比TCP愈加高效,快速。
必定的价值
都说”鱼和熊掌不能兼得“,关于TCP来说更是如此,已然挑选了”牢靠“,”高效“和”安全“作为己任,那么就必定要想一些方法让自己满意这些特征,那么TCP怎样办的呢?
牢靠
数据的牢靠性意味着接纳方接纳到了准确无误的信息,假如中心有丢包,要有必定的机制让发送方从头发送。TCP怎样办的呢?它是这么办的:
发送方经过必定方法告知接纳方,所传输的数据包有多大,然后分几回,比方:数据包一共100kb,然后分10次发送,这时分接纳方就知道一共有10个数据包,一起发送方会在每个数据包上标记上号码,然后TCP从数据包1开端承受,逐次加一,知道接纳到第十个完毕,只有这10个悉数承认收到了,接纳刚才承认这个通讯完结,所以确保了数据的牢靠性。
那么问题来了,接纳方怎样知道数据包共100kb,然后又怎样知道什么时分开端算是承受这个包?什么时分承受完结呢?这个时分便是第一次握手的开端,也可以说是第一次沟通的开端。
比方:张三(发送方)要发信息给李四(接纳方)。
1. 张三:hi,李四,我想发送一个100kb的数据包,计划分10次发送,你那儿能接一下么?
2. 李四:好的,收到,你发吧。
3. 张三:ok, 太棒了!
4. 张三:数据包1..2..3..4…5..6..7..8..9..10
那么,可不可以不打招待直接发?也便是一次握手。当然可以,就像UDP平邮似的,发呗,只不过有或许接纳方收不到信息罢了,发送方也不知道接纳方收到仍是没收到,便是得不到确保罢了。
安全
咱们有没有觉得有什么问题呢? 安全问题! 假如上面第四步张三在给李四发的时分,数据包编号每次总是从1开端,那么岂不是太简单被猜想?假如这样的话,”黑客小黑“可以在与此一起发送带有相同编号的数据包,横竖编号都从1开端,猜呗,由于TCP很傻,所以只要是编号相同就承受了,那样就不太安全,黑客就可以猜到这些数据包的编号了。
这儿说的数据包编号,其实是在TCP头信息中的”序列号“(sequence number),上面这种进犯方法叫做: TCP序列号猜测进犯(TCP_sequence_prediction_attack)
所以,为了避免序列号被踩到,咱们引进一种随机序列号的方法进行进步,便是在张三和李四第一次握手的时分,张三一起在数据包中参加一个随机序列号,发送给李四,然后由于李四收到张三的恳求信息后还需求发送承认信息回给张三,这时分,李四就成了发送方了,所以李四也需求随机出一个序列号给张三,为的也是张三那儿可以安全牢靠的得到李四的信息,这儿咱们看到,在第2次握手的时分,李四需求:
承认张三的恳求
发送自己的随机序列号
本来是两个进程的,可是,TCP为了 ”相对高效“ 的传输,就把这两步”整合“到了一步中了,然后最终一步便是,张三收到来自李四的“承认”以及“随机序列号”,然后再给李四发回一个“承认”音讯,至此,三次握手完毕,信息传输就开端了。
所以咱们把上面的栗子改善进步一下,就变成了:
1. 张三:hi,李四,我想发送一个100kb的数据包,计划分10次发送,为了避免他人猜我发的数据包编号,这是我随机出来的一个初始序列号,9381921,你那儿能接一下么? (SYN)
2. 李四:好的,收到(ACK),这是我随机出来的初始序列号,2342322,你发吧。(SYN)
3. 张三:ok, 太棒了!(ACK)
4. 张三:数据包9381921
5. 李四:收到数据包9381921,序列号:2342322
6. 张三:数据包9381922
7. 李四:收到数据包9381922,序列号:2342323
…
咱们请注意上面我在对话中标示的:SYN及ACK,便是TCP三次握手的进程:
发送方给接纳方发送SYN信号
接纳方承认并回复给发送方SYN/ACK信号
发送方给接纳方发送承认ACK信号
为什么TCP需求三次握手
我信任咱们现已对上面三次握手流程有了一个比较明晰的认识了,那么,咱们现在回到文章的主题,为什么TCP需求三次握手呢?为什么不是一次,两次或四次呢?我无妨用一个问句来答复这个问题吧: 假如是一次,两次或四次,怎样才干确保TCP的“牢靠”,“安全”及“高效”的传输呢?