socket咋谈

socket传输过程简单分解:

socket是网络编程接口,何为接口,任何两个物体,如果它们向通信交流就必须有接口,通过接口才能互相的传递数据信息,但是数据信息的传递,又必须遵循标准协议,比如你写一段中文的信发给一个美国老看,what a piece shit.于是又有了数据的协议必须用什么组织方式,是json,xml还是二进制块等等,分布在世界各地的主机要想相互的通信,就是通过socket来实现,socket又是操作系统平台给我们封装好的函数接口,通过这些函数接口我们就可以通过参数设置来实现我们想要的通信。

socket是基于TCP/IP网络通信协议实现的,TCP/IP网络通信协议就是一些数据包的信息标识,通过这些标识可以把消息送到目的主机。

协议就是标准,大家公认的标准,通过这些标准大家去实现,这样大家的信息才能相互的解析,如果MAC有自己的网络通信协议,Windows有自己的网络通信协议,Linux有自己的网络通信协议,那么Mac发给windows的消息,windows将无法解析,如果大家遵循都坐下来商量我们就定义一个大家认为都好的网络通信协议,这样各个平台的消息才能正确的解析。TCP/IP网络通信协议就是这几个平台支持实现的标准,这样各个平台之间就能相互解析网络数据。

协议又分为二进制协议,和字符串协议,二进制就是通过二进制为来标识信息的种类长度等,TCP/IP就是二进制协议,而字符串协议就是通过键值对的形式进行消息的标识,如http restful请求,通过请求参数和值来说明想要请求的服务器资源。

网络发送数据的大体思想是,想要发送的数据通过socket send发送,socket是基于TCP/IP协议,发送的数据每通过一个协议栈就会被那个协议栈处理,如加上协议头信息,数据太大了进行切割,然后交个下一个协议,最后交给硬件缓存去,硬件层转换为传输信号,如电型号,声波信号,光信号等进行传输,

接受到的一方就经过反向过程对数据进行解析,因为都遵循同一个标准,所以对方知道对方怎么打包数据,所以它就知道怎么解析数据。解析得到数据交给应用层使用。

协议栈的工作互不干扰,一层服务一层,一层为另一层工作,每一层的工作都是对上一层的数据加上该层的协议信息传递给下一层,或者去掉给协议的协议信息,交给上一层解析。

socket要想通信必须有这几方面的确定因素,要不然找不到目的地。

一个计算机可能有多个的应用程序,如果每个应用程序都有一个socket(有的有多个),当操作系统接受到来自网络的数据,它将不知道应该把数据交给那个应用程序的那个socket,所以socket在操作系统中的标识就是通过端口号来标识的,每个端口号标识一个socket,所以每个socket必须绑定一个没有被使用的端口号,当操作系统接受到网络数据,它就通过对应的端口号找到对应的socket,从而将数据交给应用层处理。

发送的数据只知道端口号,还是不能传输,它还要计算机的逻辑地址IP,通过对应的IP找到对应的主机,因为一个局域网中可能有很多个计算机,每个计算机被分配的IP不一样,当改局域网接受到从外网的数据,就是通过IP找到对应的目的主机。每个主机又有硬件Mac地址。你要发送给谁了,于是就要指定对方的IP和端口号

数据,端口,IP,Mac,目的地址的IP和端口号。这就构成了传输数据的基本条件了。

note:真正的实现没有这么简单的,这里主要是把它的过程进行简单的分解从而了解网络编程的思想,要想真正的写出好的网络通信框架需要不断的积累。想要知道理论上的网络通信可以通过《TCP/IP详解的原理》《TCP/IP的实现》进行了解。

TCP/IP协议栈(网络资源)

协议栈说明:

应用层:

Telnet,FTP,SMTP,DNS,HTTP都是在应用成比较常用的应用程序,有的可以用来获取对应IP的域名,进行网络诊断,邮件传输,浏览器的HTTP请求的。

传输层:

TCP  UDP的主要区别是可靠传输和不可靠传输,数据包形式和数据流的形式传输

网络层:

IP,ARP,PARP,ICMP,就属于协议的劳动者了,这些协议的主要工作就是对网络状态的控制协议,检测网络环境是否通,发送的数据包是否发送完成,目的地址是否可达,发送状态,发送超时检测等等。

网络层:

各种通信网络接口,它决定信息的传输方式和形式。

数据的传输本质上就是加上协议头和信息通过物理层转换成传输介质进行传输。解析就是通过去掉底层的协议信息逐渐的交个上一层,直到应用层。

socket的传输图解:(真正过程没这么简单)

时间: 2024-10-20 10:07:55

socket咋谈的相关文章

浅谈TCP/IP网络编程中socket的行为

我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: . TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) . Socket I/O系统调用(重点如read/write),这是TCP/IP协议在应用层表现出来的行为. . 编写Performant, Scalable的服务器程序.包括多线程.IO Multiplexing.非阻塞.异步等各种技术. 关于TCP/IP协议,建议参考Richard Stevens的<TCP/IP Illust

浅谈IM软件怎样建立安全socket连接、登录

----------------------------------------------------欢迎查看IM软件业务知识<专栏>-------------------------------------------------------------------使用状态机来保持在线状态 [点击]                      拼图算法,将零碎小图,整理到一张大图上[点击]登录导航 [点击]                                          

再谈用java实现Smtp发送邮件之Socket编程

很多其它内容欢迎訪问个人站点   http://icodeyou.com 前几天利用Socket实现了用java语言搭建webserver,全程下来应该会对Socket这个东西已经使用的很熟悉了.尽管抽象,可是使用过一次之后就会感受到它在网络通信上的作用是多么的强大.正好,今天就继续用Socket来练习使用下面Smtp协议发送一封简单的电子邮件.今天的故事呢,是我要约我女神出去吃饭啦啦啦~~~所以,面对Smtp.仅仅许成功,不许失败. 全局假定我的邮箱为[email protected]   女

浅谈android Socket 通信及自建ServerSocket服务端常见问题

摘  要:TCP/IP通信协议是可靠的面向连接的网络协议,它在通信两端各建立一个Socket,从而在两端形成网络虚拟链路,进而应用程序可通过可以通过虚拟链路进行通信.Java对于基于TCP协议的网络通信提供了良好的封装,使用Socket对象代表两端的通信接口,通过Socket产生I/O流进行网络通信. 自建ServerSocket服务端时可能因PC与手机平板终端未接入同一路由器,因此无法访问服本地IP,可以尝试以下两种方式解决 关键词: Socket; ServerSocket;本地IP; ad

浅谈Flash Socket通信安全沙箱

用过Flash socket的同学都知道.Flash socket通讯有安全沙箱问题.就是在Flash Player发起socket通信时.会向服务端获取安全策略,假设得不到服务端响应,flash将无法连接到服务端. 首先.什么是Flash安全沙箱? Flash安全沙箱是Flash Socket的一种安全策略.为避免随意Flash终端与目标主机建立Socket通讯,以授权port,域名方式限定连接. 那么.Flash Player怎么获取Socket策略? Flash Player发起socke

[转]浅谈Flash Socket通信安全沙箱

用过Flash socket的同学都知道,Flash socket通讯有安全沙箱问题.就是在Flash Player发起socket通信时,会向服务端获取安全策略,如果得不到服务端响应,flash将无法连接到服务端. 首先,什么是Flash安全沙箱? Flash安全沙箱是Flash Socket的一种安全策略,为避免任意Flash终端与目标主机建立Socket通讯,以授权端口,域名方式限定连接. 那么,Flash Player怎么获取Socket策略? Flash Player发起socket通

浅谈TCP socket

Socket,用来实现应用的通信,是应用非常广的一个api,今天就来揭开它的神秘面纱. 客户端 引入头文件 #include <winsock2.h> 初始化socket的DLL WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData 创建套接字 SOCKET socket(int domain, int type, int protocol); domain 是协议域,包括 AF_INET 对应 ipv4 AF_INET6 对应 ip

浅谈tcp socket的backlog参数

最近看netty源码碰到ChannelOption.SO_BACKLOG参数,通过跟踪代码发现其实是用于设置底层tcp socket的backlog参数,由于不了解这个参数,有必要彻底的理解一下. 底层 backlog参数主要用于底层方法int listen(int sockfd, int backlog), 在解释backlog参数之前,我们先了解下tcp在内核的请求过程,其实就是tcp的三次握手: 1.client发送SYN到server,将状态修改为SYN_SEND,如果server收到请

谈一谈socket与java

用java中socket实现socket聊天 1,      什么是socket Socket 是指网络套接字,什么是套接字呢?    这是网络上一种端对端的网络协议,端口就是进程号,socket在网络中让这两个端通信形成端口直接通信,所以socket的参数可想而知就是两端ip和端口号了: 再说在网络中,总要有人付出,要在网络中等着别人链接,不然的话你一点想连别人,别人在两点想连你,怎么也不可能连上,总有哟个人需要做等待的角色,这个角色就是服务端也就是serverSocket,他在网络中提供一个