新Socket与网络

Posted ttaall

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新Socket与网络相关的知识,希望对你有一定的参考价值。

网络编程就是,写一个程序让两个计算机联网进行数据交互

Socket套接字,实现计算机之间相互通信

协议就是一种规范,使用某个协议就是遵守某种定义好的规范

网络通信确认身份三要素,IP地址,MAC地址,端口号

真正唯一标识一台计算机的是MAC地址

 

一.

TCP/IP协议下的Socket:          应用:http协议下的浏览器html页面

面向连接的        
数据在传输过程中不会消失

数据是按顺序传输的

数据发送和接收不是同步的

 

二.

UTD协议下的Socket:            应用:语音,视频等传输

面向无连接

传输的数据可能丢失或损毁

重于快速传输而非顺序传输

发送和接收是同步的

限制传输数据大小

 

三.

OSI七层模型:                        TCP/IP模型

应用层 应用程序 应用层 ----HTTP协议 FTP协议

表示层 Socket     传输层 ----TCP协议  UDP协议

会话层 路由器 网络层 ----IP协议,地址解析协议

传输层 交换机      链路层

网络层

数据链路层

物理层

 

四.

IP地址分为IPV4  IPV6 目前大部分还是IPV4

 

由于IP地址资源比较珍贵,一个局域网可以拥有一个独立IP,做不到一台计算机一个。

数据包中自带IP地址信息,把数据包发送给路由器后,路由器利用算法根据IP地址找到对方计算机,完成传输。

 

五.

MAC地址:媒体访问控制地址

也称局域网地址,以太网地址,物理地址

每个MAC地址都是独一无二的,在计算机出厂时就写在网卡上

 

数据包中携带IP地址和MAC地址,发送到路由器/交换机后 可以找到对应的计算机,完成数据传递。

 

六.

Port端口号:计算机会给每个应用程序分配一个端口号

数据包发送到计算机后,根据不同的端口号,发送到不同应用上。

 

七.

Socket缓冲区:每个Socket被创建会分配两个缓冲区,输入缓冲区和输出缓冲区

要输出的数据会先存入输出缓冲区,再由TCP协议自行发送出去

输入来的数据也会先存入输入缓冲区,再读取

 

八.

阻塞模式

发送时候:

1.write出数据之前会先查看缓冲区,当缓冲区剩余大小小于要发送数据会进入阻塞,等缓冲区数据发送出去 腾出足够空间,再write进缓冲区

2.当缓冲区数据向网络发送时候 会进入阻塞,不能再写入直到缓冲区发送完毕。

3.如果要写入的数据要大于缓冲区最大长度,则分批写入。

读入时候:

  1. read如数据时候,如果缓冲区为空则进入阻塞直到有数据发送来
  2. 如果不能一次性把缓冲区数据读完,剩余数据会在缓冲区继续积压,等待下次read

 

 

九.

粘包问题:当发送端多次发送的数据包,被接收端当作一次的数据包接收,无法判断边界,只能当连续的数据流接收。

 

十.

建立连接三次握手:

Seq为每次发送的数据包的用来标识的序号 Ack为另一端确认后再Seq基础上+1

当每次 Ack = Seq + 1成立 说明对方已经确认了收到自己的数据包

第一次握手。客户端发送请求给服务器  Seq=1000

第二次握手。服务器接收到客户端请求后 发送确认准备给客户端 Seq=2000 Ack=1001

第三次握手。客户端接收到后 发送确认准备给服务器 Ack=2001

 

 

 

 

十一.

断开连接四次挥手:

第一次挥手。客户端向服务端发送断开连接请求,客户端进入wait1状态等待

第二次挥手。服务端收到请求并向客户端发送 进行断开准备工作,客户端进入wait2等待

第三次挥手。服务端准备好,并向客户端发送 可以断开了

第四次挥手。客户端发送你可以断开连接了 然后进入TIMEWAIT。服务端接收到后断开连接

 

以上是关于新Socket与网络的主要内容,如果未能解决你的问题,请参考以下文章

廖雪峰Java13网络编程-1Socket编程-3TCP多线程编程

网络与socket

网络通信与Socket

各位好,本人在进行Linux socket网络编程时,遇到了下面的情况:

谈一谈socket与java

Socket网络编程进阶与实战