计算机网络

1.计算机网络漫谈:

https://www.jianshu.com/p/c793a279f698

2.面试常考题:

https://www.nowcoder.com/discuss/1937

3.TCP/IP中的几个标识:SYN, FIN, ACK, PSH, RST, URG.

SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)

SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。

具体详情请移步:https://blog.csdn.net/moshenglv/article/details/52085067

4. TCP/IP 三次握手,四次挥手

三次握手:




四次挥手:

                                                                      TCP状态迁移图

            

客户端的状态变迁:CLOSED-->SYN_SENT-->ESTABLISHED-->FIN_WAIT_1-->FIN_WAIT_2-->TIME_WAIT-->CLOSED

服务器的状态变迁:CLOSED-->LISTEN-->SYN_RCVD-->ESTABLISHED-->CLOSE_WAIT-->LAST_ACK--->CLOSED

CLOSED:这个状态不是一个真正的状态,是图中假想的一个起点或者是终点

LISTEN: 服务器等待连接过来的状态

SYN_SENT: 客户端发起连接(主动打开),变成此状态,如果SYN超时,或者服务器不存在直接CLOSED

SYN_RCVD:服务器收到SYN包的时候,就变成此状态,

ESTABLISHED:完成三次握手,进入连接建立状态,说明此时可以进行数据传输了

FIN_WAIT_1:客户端执行主动关闭,发送完FIN包之后便进入FIN_WAIT_1状态

FIN_WAIT_2:客户端发送FIN包之后,收到ACK,即进入此状态,其实就是半关闭的状态

TIME_WAIT:这个状态从图上看,有3中情况,从FIN_WAIT_2进入,客户端收到服务器发送过来的FIN包之后进入TIME_WAIT状态,有CLOSING状态进入,这是同时关闭的状态,同时发起FIN请求,同时接收并做了ACK的回复,从FIN_WAIT_1进入,收到对端的FIN,ACK,并回复ACK,这个地方感觉是,FIN和ACK是一块来的.

CLOSE_WAIT:接收到FIN之后,被动的一方进入此状态,并回复ACK

LAST_ACK:被动的一端发送FIN包之后 处于LAST_ACK状态

CLOSING:两边同时发出FIN请求

详情请移步:http://www.cnblogs.com/newwy/p/3234536.html
                      https://blog.csdn.net/qzcsu/article/details/72861891

                    https://blog.csdn.net/wdscq1234/article/details/52416641


5.为什么是三次握手,而不是两次?

如果两次握手就建立连接,可能导致服务器端接收到过期的连接请求后建立连接,从而浪费资源。

假设出现一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某个网络节点长时间滞留了,以至于延误到连接释放以后的某个时间才到达B。而本来这是一个早已经失效的报文段。但B收到此失效的连接请求报文段后,就误认为是A又发出一次新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立了。

     由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。但B却以为新的运输连接已经建立了,并一直等待A发送数据。B的许多资源就这样白白浪费了。 

6.四次挥手释放连接,等待2MSL的意义(或者说为什么要有TIME_WAIT状态?)?

(1).为了保证A发送的最有一个ACK报文段能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN和ACK报文段的确认。B会超时重传这个FIN和ACK报文段,而A就能在2MSL时间内收到这个重传的ACK+FIN报文段。接着A重传一次确认。

(2).就是防止上面提到的已失效的连接请求报文段出现在本连接中,A在发送完最有一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。

7 .ARP的中文意思是(地址解析协议),请用简单语言说明其的工作原理。

    (1). 首先,每台主机都会在自己的ARP缓冲区 (ARP Cache)中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系。

  (2). 当源主机需要将一个数据包要发送到目的主机时,对应会首先检查自己 ARP列表中是否存在该 IP地址的MAC地址,       如果有就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。

  (3). 网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址;

  (4). 源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。


8.有关套接字Scoket编程的过程中的三次握手
  • 客户端向服务器发送一个SYN J
  • 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1
  • 客户端再想服务器发一个确认ACK K+1

从图中可以看出,当客户端调用connect时,触发了连接请求,向服务器发送了SYN J包,这时connect进入阻塞状态;服务器监听到连接请求,即收到SYN J包,调用accept函数接收请求向客户端发送SYN K ,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K ,ACK J+1之后,这时connect返回,并对SYN K进行确认;服务器收到ACK K+1时,accept返回,至此三次握手完毕,连接建立。

总结:客户端的connect在三次握手的第二个次返回,而服务器端的accept在三次握手的第三次返回。

重点参考该博客:http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html
结合《深入理解计算机系统》P655页  配合食用更佳
  • 服务器端:

– 申请一个socket (socketWatch)用来监听的

– 绑定到一个IP地址和一个端口上

– 开启侦听,等待接授客户端的连接

– 当有连接时创建一个用于和连接进来的客户端进行通信的socket(socketConnection)

– 即续监听,等侍下一个客户的连接

  • 客户端:

– 申请一个socket(socketClient)

– 连接服务器(指明IP地址和端口号)

9.我们从一个用户的角度来自顶向下的过一遍,一个网络数据包的过程。
  首先我们设置了本机参数:
  • 本机的IP地址:192.168.1.100
  • 子网掩码:255.255.255.0
  • 网关的IP地址:192.168.1.1
  • DNS的IP地址:8.8.8.8

然后打开浏览器访问谷歌的网址:www.google.com,按下回车。这意味着,浏览器要向Google发送一个网页请求的数据包。
第一步:
  主机会像DNS服务器发送请求,已知DNS服务器为8.8.8.8,于是我们向这个地址发送一个DNS数据包(53端口);然后,DNS服务器做出响应,告诉我们Google的IP地址是172.194.72.105。于是,我们知道了对方的IP地址。
第二步:
  接下来,我们要判断,这个IP地址是不是在同一个子网络,这就要用到子网掩码。已知子网掩码是255.255.255.0,本机用它对自己的IP地址192.168.1.100,做一个二进制的AND运算(两个数位都为1,结果为1,否则为0),计算结果为192.168.1.0;然后对Google的IP地址172.194.72.105也做一个AND运算,计算结果为172.194.72.0。这两个结果不相等,所以结论是,Google与本机不在同一个子网络。
第三步:
  因此,我们要向Google发送数据包,必须通过网关192.168.1.1转发,也就是说,接收方的MAC地址将是网关的MAC地址。至此发送的各种必要参数已经基本确定了,数据包也可以发送了。

简而言之:
  1. 浏览器向DNS服务器查找输入URL对应的IP地址。
  2. DNS服务器返回网站的IP地址。
  3. 浏览器根据IP地址与目标web服务器在80端口上建立TCP连接
  4. 浏览器获取请求页面的html代码。
  5. 浏览器在显示窗口内渲染HTML。
  6. 窗口关闭时,浏览器终止与服务器的连接。

10.交换机与路由器的差别?

工作层次不同
交换机主要工作在数据链路层(第二层)
路由器工作在网络层(第三层)。 转发依据不同
交换机转发所依据的对象是:MAC地址。(物理地址)
路由转发所依据的对象是:IP地址。(网络地址) 主要功能不同
交换机主要用于组建局域网,连接同属于一个(广播域)子网的所有设备,负责子网内部通信(广播)。
路由主要功能是将由交换机组好的局域网相互连接起来,或者将他们接入Internet。
交换机能做的,路由都能做。
交换机不能分割广播域(子网),路由可以。
路由还可以提供防火墙的功能。
路由配置比交换机复杂。

11.TCP状态转移图
https://www.cnblogs.com/figo-cui/p/5137993.html

重点可以参考:https://blog.csdn.net/justloveyou_/article/details/78303617

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值