Java网络编程 -- 网络协议
OSI网络七层协议
为使不同计算机厂家的计算机能够互相通信,以便在更大的范围内建立计算机网络,有必要建立一个国际范围的网络体系结构标准。OSI网络七层协议就是在这个基础上制定出来的,其从最底层开始依次是物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
各层主要功能
物理层:使原始的数据比特流能在物理介质上传输
数据链路层:通过校验,确认和反馈重发等手段,形成稳定的数据链路
网络层:进行路由选择和流量控制(IP协议)
传输层:提供可靠的端口到端口的数据传输服务(TCP/UDP协议)
会话层:负责建立,管理和终止进程之间的会话和数据交换
表示层:负责数据格式转换,数据加密和解密,压缩与解压缩等
应用层:为用户的应用进程提供网络服务
传输控制协议TCP
传输控制协议TCP是网络中一个重要的传输层协议。TCP提供面向连接的,可靠,有序的字节流传输服务。应用程序在使用TCP之前,需要通过三次握手建立TCP连接。连接结束后需要通过四次挥手断开连接。
TCP握手机制
建立连接时三次握手:
断开连接时四次挥手:
用户数据报协议UDP
用户数据报协议UDP是网络中一个重要的传输层协议。提供无连接的,不可靠的数据报尽力传输服务。由于UDP无需建立连接,首部开销小,协议格式也更简洁。
TCP和UDP的比较
| TCP | UDP |
|---|---|
| 面向连接 | 无连接 |
| 提供可靠保证 | 不可靠 |
| 相对较慢 | 相对较快 |
| 占用资源多 | 占用资源少 |
Socket编程
Socket编程是网络中应用最广泛的网络应用编程接口,实现了三种底层协议接口
- 数据报类型套接字SOCK_DGRAM (面向UDP接口)
- 流式套接字SOCK_STREAM(面向TCP接口 )
- 原始套接字SOCK_RAW(面向网络层协议接口IP,ICMP等)
主要Socket API及其调用过程:
Socket API核心方法
只能用于服务端的listen(), accept()方法,只能用于客户端的connecty()方法,还有socket(), bind(), send(), recv(), sendTo(), recvFrom(), close()等方法。

Java网络编程 -- 网络协议的更多相关文章
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- 网络编程TCP协议-聊天室
网络编程TCP协议-聊天室(客户端与服务端的交互); <span style="font-size:18px;">1.客户端发数据到服务端.</span> ...
- 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法
网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...
- [转] - Linux网络编程 -- 网络知识介绍
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...
- UNIX网络编程——网络IPC:套接字
UNIX网络编程——网络IPC:套接字 Contents 套接字接口 套接字描述符 寻址 字节序 地址格式 地址查询 绑定地址 建立连接 数据传输 套接字选项 带外数据 UNIX域套接字 使用套接字的 ...
- java网络编程+通讯协议的理解
参考: http://blog.csdn.net/sunyc1990/article/details/50773014 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很 ...
- java socket编程(网络编程)
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- Java Socket编程----网络基础
详见:https://www.cnblogs.com/rocomp/p/4790340.html Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而 ...
- [转]C#网络编程(订立协议和发送文件) - Part.4
本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part4.aspx 源码下载:http://www.trac ...
随机推荐
- 20141209-基本概念-BlogEngine.NET(1)-笔记
最近在读BlogEngine.NET3.1源代码,希望能坚持到底吧. 刚接触源代码,没有思路,于是读了14篇关于BlogEngine.Net1.4.5的系列博客,地址:http://www.cnblo ...
- Java编程思想:文件加锁
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; i ...
- Flutter学习笔记(8)--Dart面向对象
如需转载,请注明出处:Flutter学习笔记(7)--Dart异常处理 Dart作为高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式,基于mixin的继承方式是指:一个类可以继承自多 ...
- [转载]linux下清除Squid缓存的方法记录
在日常运维工作中,只要用到squid缓存服务,就会常常被要求清理squid缓存. 比如公司领导要求删一篇新闻,新闻是生成的静态.运维人员把服务器上静态的新闻页面删除了后,不料代理服务器上缓存还有.缓存 ...
- 和朱晔一起复习Java并发(三):锁(含锁性能测试)
这个专题我发现怎么慢慢演化为性能测试了,遇到任何东西我就忍不住去测一把.本文我们会大概看一下各种锁数据结构的简单用法,顺便也会来比拼一下性能. 各种并发锁 首先,我们定一个抽象基类,用于各种锁测试的一 ...
- Ubuntu系统安装QQ等软件
1.安装deepin-wine环境:上https://github.com/wszqkzqk/deepin-wine-for-ubuntu页面下载zip包(或用git方式克隆),解压到本地文件夹,在文 ...
- java高并发系列 - 第15天:JUC中的Semaphore,最简单的限流工具类,必备技能
这是java高并发系列第15篇文章 Semaphore(信号量)为多线程协作提供了更为强大的控制方法,前面的文章中我们学了synchronized和重入锁ReentrantLock,这2种锁一次都只能 ...
- easypermissions的基本使用
转载请注明出处 http://blog.csdn.net/pyfysf/article/details/78204395 Android 6.0(API 级别 23)开始,在应用运行时向其授予权限,而 ...
- F#周报2019年第30期
新闻 Fantomas 3.0 宣告.NET Core 3.0预览版7 .NET Core 3.0预览版7中ASP.NET Core与Blazor的升级 Visual Studio 2019版本16. ...
- css常用知识与用法
1 类选择器就是再 某一个标签后面加上class =“” 然后再到前面去定义这个class 一定要记住前面加. 2 id选择器和类选择器是差不多的 不过id选择器前面不加.而加# ...