临时抱佛脚!面试恶补计算机网络知识?这篇TCP知识总结请笑纳!

计算机网络实验总结(五至八) 网络编程与工具使用:为了进行实际的IP协议探索和IP分片分析,需要掌握一定的网络编程知识,能够编写简单的程序来模拟IP数据包的发送和接收。同时,通过实际操作和分析,我们也可以发现理论知识中的不足和局限性,从而进一步完善和深化我们的理解。同时,通过实际操作和分析,我们也可以发现理论知识中的不足和局限性,从而进一步完善和深化我们的理解。此外,通过编写程序模拟IP数据包的发送和接收,以及使用网络抓包工具进行数据分析,我不仅提升了编程和数据分析能力,也增强了解决实际问题的能力。 阅读详情

前言

TCP这些东西,基本每个程序猿都或多或少是掌握的了。虽然感觉在实际开发中没有什么用武之处,但,面试他要问啊

而最近大家伙过完年,也都在准备春招,我也一样。阅读了一些okHttp源码之后,又屁颠屁颠地跑回来重新把tcp、http这些东西给重新学了一遍。okHttp基本都是这些协议的实现,而理解源码的基础是,理解tcp、http。

重新看了一遍tcp之后,我把这些东西给总结了下来,也就有了这篇文章。

计算机网络的知识特点就是:琐碎。靠背诵“面试八股文”估计没多久就忘了。TCP是计算机网络运输层的一个协议,所以首先要对计网分层结构以及运输层有一定的理解。然后是TCP的四个重点:面向连接、可靠传输原理、流量控制和拥塞控制,最后再补充一点粘包和拆包的知识。

作者

一只修仙的猿

计网分层结构

考虑最简单的情况:两台主机之间的通信。这个时候只需要一条网线把两者连起来,规定好彼此的硬件接口,如都用USB、电压10v、频率2.4GHz等,这一层就是物理层,这些规定就是物理层协议


我们当然不满足于只有两台电脑连接,因此我们可以使用交换机把多个电脑连接起来,如下图:

这样连接起来的网络,称为局域网,也可以称为以太网(以太网是局域网的一种)。在这个网络中,我们需要标识每个机器,这样才可以指定要和哪个机器通信。这个标识就是硬件地址MAC。硬件地址随机器的生产就被确定,永久性唯一。在局域网中,我们需要和另外的机器通信时,只需要知道他的硬件地址,交换机就会把我们的消息发送到对应的机器。

这里我们可以不管底层的网线接口如何发送,把物理层抽离,在他之上创建一个新的层次,这就是数据链路层


我们依然不满足于局域网的规模,需要把所有的局域网联系起来,这个时候就需要用到路由器来连接两个局域网:

但是如果我们还是使用硬件地址来作为通信对象的唯一标识,那么当网络规模越来越大,需要记住所有机器的硬件地址是不现实的;同时,一个网络对象可能会频繁更换设备,这个时候硬件地址表维护起来更加复杂。这里使用了一个新的地址来标记一个网络对象:IP地址

通过一个简单的寄信例子来理解IP地址。

我住在北京市,我朋友A住在上海市,我要给朋友A写信:

  1. 写完信,我会在信上写好我朋友A的地址,并放到北京市邮局(给信息附加目标IP地址,并发送给路由器)
  2. 邮局会帮我把信运输到上海市当地邮局(信息会经过路由传递到目标IP局域网的路由器)
  3. 上海市当地路由器会帮我把信交给朋友A(局域网内通信)

因此,这里IP地址就是一个网络接入地址(朋友A的住址),我只需要知道目标IP地址,路由器就可以把消息给我带到。在局域网中,就可以动态维护一个MAC地址与IP地址的映射关系,根据目的IP地址就可以寻找到机器的MAC地址进行发送

这样我们不需管理底层如何去选择机器,我们只需要知道IP地址,就可以和我们的目标进行通信。这一层就是网络层。网络层的核心作用就是 提供主机之间的逻辑通信 。这样,在网络中的所有主机,在逻辑上都连接起来了,上层只需要提供目标IP地址和数据,网络层就可以把消息发送到对应的主机。


一个主机有多个进程,进程之间进行不同的网络通信,如边和朋友开黑边和女朋友聊微信。我的手机同时和两个不同机器进行通信。那么当我的手机收到数据时,如何区分是微信的数据,还是王者的数据?那么就必须在网络层之上再添加一层:运输层

运输层通过socket(套接字),将网络信息进行进一步的拆分,不同的应用进程可以独立进行网络请求,互不干扰。这就是运输层的最本质特点:提供进程之间的逻辑通信 。这里的进程可以是主机之间,也可以是同个主机,所以在android中,socket通信也是进程通信的一种方式。


现在不同的机器上的应用进程之间可以独立通信了,那么我们就可以在计算机网络上开发出形形式式的应用:如web网页的http,文件传输ftp等等。这一层称为应用层

应用层还可以进一步拆分出表示层、会话层,但他们的本质特点都没有改变:完成具体的业务需求 。和下面的四层相比,他们并不是必须的,可以归属到应用层中。


最后对计网分层进行小结:

  1. 最底层物理层,负责两个机器之间通过硬件的直接通信;
  2. 数据链路层使用硬件地址在局域网中进行寻址,实现局域网通信;
  3. 网络层通过抽象IP地址实现主机之间的逻辑通信;
  4. 运输层在网络层的基础上,对数据进行拆分,实现应用进程的独立网络通信;
  5. 应用层在运输层的基础上,根据具体的需求开发形形式式的功能。

这里需要注意的是,分层并不是在物理上的分层,而是逻辑上的分层。通过对底层逻辑的封装,使得上层的开发可以直接依赖底层的功能而无需理会具体的实现,简便了开发。

这种分层的思路,也就是责任链设计模式,通过层层封装,把不同的职责独立起来,更加方便开发、维护等等。okHttp中的拦截器设计模式,也是这种责任链模式。

运输层

本文主要是讲解TCP,这里需要增加一些运输层的知识。

本质:提供进程通信

在运输层之下的网络层,是不知道该数据包属于哪个进程,他只负责数据包的接收与发送。运输层则负责接收不同进程的数据交给网络层,同时把网络层的数据拆分交给不同的进程。从上往下汇聚到网络层,称为多路复用,从下往上拆分,称为多路拆分

运输层的表现,受网络层的限制。这很好理解,网络层是运输层的底层支持。所以运输层是无法决定自己带宽、时延等的上限。但可以基于网络层开发更多的特性:如可靠传输。网络层只负责尽力把数据包从一端发送到另一端,而不保证数据可以到达且完

TCP 完整总结 概述 TCP/IP 是网络使用中最基本的通信协议,它规定了互联网中进行通信的标准和方法。其中它包含TCP、UDP、SMTP、IP 等绝大多数协议,因为 TCP、IP 协议最具代表,因此才命名为 TCP/IP 协议。本博客我就来简单整理 TCP 协议相关知识 TCP TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。本博客我打算分以下几个模块介绍 TCP 协议: TCP 协议的结构 三次握手与四次挥手 TCP 协议如何保证可靠性 阅读详情

相关推荐

Wireshark 使用技巧详解

显示过滤器远比抓包过滤器更加灵活和强大。显示过滤器不会丢失数据包,只是为了增强用户阅读而将一部分数据包隐藏起来。丢弃数据包有时并非明智选择,因为一旦数据包被丢弃,这些数据包也就无法再恢复回来了。在分组列表面板上面的输入框,你可以输入显示过滤器,或者通过下拉显示近期使用的过滤器记录,来选择使用显示过滤器。在用户配置了显示过滤器之后,只有那些满足用户过滤器设置条件的数据包才会被显示出来。使用应用了显示过滤器之后,就会在Wireshark状态栏的第二列看到使用显示过滤器后的相关信息。

悦分享 5060

这一TCP总结收下

前言 很高兴遇见你~ TCP这些东西,基本每个程序猿都或多或少是掌握的了。虽然感觉在实际开发中没有什么用武之处,但,面试他要问啊 而最近大家伙过完年,也都在准备春招,我也一样。阅读了一些okHttp源码之后,又屁颠屁颠地跑回来重新把tcp、http这些东西给重新学了一遍。okHttp基本都是这些协议的实现,而理解源码的基础是,理解tcp、http。 重新看了一遍tcp之后,我把这些东西给总结了下来,也就有了这文章。 计算机网络知识特点就是:琐碎。靠背诵“面试八股文”估计没多久就忘了。TCP计算机网络

一只修仙的猿 638

C++ int转四字节数组

字节转换

我不是码农的博客~~~ 947

网络编程—HTTP

4.4 HTTP编程 4.4.1 UDP和TCP的区别 UDP是一种数据报模式的协议,TCP是一种流模式的协议。 UDP的发送端调用了几次sendto,接收端必须用相同次数的recvfrom读取数据。因为UDP是基于报文的,每次只能读取一个报文,报文之间不会合并;若接收缓冲区小于报文长度,则多余部分会被丢弃。 TCP的发送端调用发送(send)100字节的数据,但是接收缓冲区只有10字节,...

Bing_bing_bing_的博客 601

临时抱佛脚面试恶补计算机网络知识?这TCP知识总结笑纳

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的Android开发中高级必知必会核心笔记,共计2968页PDF、58w字,囊括Android开发648个知识点,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。以上分享【Android开发中高级必知必会核心知识笔记】七大模块整套学习资料均免费分享,需要的小伙伴,我已经上传到GitHub了,大家自取就可以了。白嫖可以,别忘了给我点个关注哈。

m0_61043185的博客 1091

临时抱佛脚面试恶补计算机网络知识?这TCP知识总结笑纳!(1)

最后看一下学习需要的所有知识点的思维导图。在刚刚那份学习笔记里包含了下面知识点所有内容!文章里已经展示了部分!如果你正愁这块不知道如何学习或者想提升学习这块知识的学习效率,那么这份学习笔记绝对是你的秘密武器!

2401_84121499的博客 903

最新临时抱佛脚面试恶补计算机网络知识?这TCP知识总结笑纳!,android自定义view面试

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。下面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题全套解析,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于幅有限,下面只是以图片的形式给大家展示一部分。知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

2401_84562659的博客 1046

tcp协议分析实验报告心得_从TCP协议到TCP通信的各种异常现象和分析(上)

很多人总觉得学习TCP/IP协议没什么用,觉得日常编程开发只需要知道socket接口怎么用就可以了。如果大家定位过线上问题就会知道,实际上并非如此。如果应用在局域网内,且设备一切正常的情况下可能确实如此,但如果一旦出现诸如中间交换机不稳定、物理服务器宕机或者其它异常情况时,此时引起的问题如果只停留在套接字接口的理解层面将无法解决。因此,深入理解TCP/IP协议,对我们分析异常问题有很大的帮助。下图...

weixin_33203970的博客 3529

TCP协议总结

TCP全称为 “传输控制协议(Transmission Control Protocol”). 人如其名, 要对数据的传输进行一个详细的控制; 1.tcp协议格式 源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去; 4位TCP报头长度: 表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最大长度是15 * 4 = 60 6位标志位: URG: 紧急指针是否有效 ACK: 确认号是否有效 PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走 RST: 对方要求重新建立

qq_44758862的博客 502

TCP网络编程心得体会浅谈

**在tcp编程中,我们以服务端为发送端,客户端为接收端举例。通信过程中发送端和接收端都有一个接收缓冲区和发送缓冲区(也就是说一边两个缓冲区),在编程过程中当我们使用send方法的时候所做的工作就是—-将程序中的数据发送到计算机内核的发送缓冲区,而当我们使用recv()方法时就是—将接收缓冲区中的数据读取到程序中。而真正的数据交互就是tcp协议和计算机内核去完成了与我们的编程程序无关。 下面说几...

xu_徐的博客 3808

tcp协议分析实验报告心得_TCP/IP协议组——完整工作过程分析

1.什么是TCP/IPTCP/IP是一套用于网络通信的协议集合或者系统。TCP/IP协议模型就有OSI模型分为7层。但其实一般我们所谈到的都是四层的TCP/IP协议栈。网络接口层:主要是指一些物理层层次的接口,比如电缆等网络层:提供了独立于硬件的逻辑寻址,实现物理地址和逻辑地址的转换。网络层协议包括IP协议(网际协议),ICMP协议(互联网控制报文协议),IGMP协议(Internet组...

weixin_34900026的博客 6777

三次握手的学习总结

四次连接有点多余,第三次的时候,我们已经互相进行了连接确认但是因为我们无法保证百分百的可靠性。

weixin_46760925的博客 332

计算机网络(二十二)TCP介绍

计算机网络(二十二)TCP介绍1.TCP的特点及其目的2.通过序列号与确认应答提高可靠性 TCP充分地实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。 TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。 根据TCP的这些机制,在IP这种无连接的网络上也能够实现高可靠性的通信。 1.TCP的特点及其目的 TC...

NEUChords的博客 773

29.Labview界面设计 --- (下)自定义控件库、界面布局与外观设计

1.自定义控件外观(自定义控件)1.1 自定义外观库1.2 手动自定义控件外观2. 前面板控件布局方式(控件排布)2.1 模块化控制布局方式2.2 数据采集布局方式3. 前面板外观优化项(背景设计)3.1 前面板背景设计3.2 前面板窗口整理本节第一部分教大家安装一种可以直接用的自定义控件库,第二部分教大家如何自己设计控件并保存调用。

关注我,更多技术问题欢迎私聊~ 4714

基于Python+OpenCV的车牌识别系统项目源码(高分项目).zip

基于Python+OpenCV的车牌识别系统项目源码(高分项目).zip 已获老师指导并通过的高分毕业设计项目,也可作为期末大作业和课程设计,纯手打高分项目,小白实战没难度。基于Python+OpenCV的车牌识别系统项目源码(高分项目).zip 已获老师指导并通过的高分毕业设计项目,也可作为期末大作业和课程设计,纯手打高分项目,小白实战没难度。基于Python+OpenCV的车牌识别系统项目源码(高分项目).zip 已获老师指导并通过的高分毕业设计项目,也可作为期末大作业和课程设计,纯手打高分项目,小白实战没难度。基于Python+OpenCV的车牌识别系统项目源码(高分项目).zip 已获老师指导并通过的高分毕业设计项目,也可作为期末大作业和课程设计,纯手打高分项目,小白实战没难度。基于Python+OpenCV的车牌识别系统项目源码(高分项目).zip 已获老师指导并通过的高分毕业设计项目,也可作为期末大作业和课程设计,纯手打高分项目,小白实战没难度。基于Python+OpenCV的车牌识别系统项目源码(高分项目).zip 已获老师指导并通过的高分毕业设计项目

上一篇: 腾讯Android高工面试:为什么要使用SparseArray和ArrayMap替代HashMap?
下一篇: 程序员35岁后的四大出路,你想好走哪一条了吗?
盖亚亚亚亚
博客等级 码龄6年 30粉丝 16原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值