聯想今天在台灣發表了以 ThinkPad P1 和 ThinkStation P330 Tiny 為代表的新一代工作站機種,大大地豐富了工作線站的產品。在此之前聯想的工作站筆電雖然有著怪物級的效能,但也同樣有著怪物級的重量,這次的 ThinkPad P1 則是參考了 ThinkPad X1 Carbon 的各種減重技巧與設計,讓搭載了 i7-8850H / Xeon E-2176M 與最高 NVIDIA Quadro P2000 的 15.6 吋機身,也能把重量壓在了 1.7kg。眼尖的讀者可能會發現它與稍晚發表的 ThinkPad X1 Extreme 非常相似,可以看做是使用工作站級顯卡的兄弟機吧。雖然說不是 X1 Carbon 等級的輕,但對於需要帶著工作站四處跑的專業人士來說,也是減輕了不少負擔了。
最後,是超迷你工作站 P330 Tiny,前代 P320 Mini
的規格升級版。雖然說外觀上並沒有太大的變化,但這仍然是個相當驚人的小盒子,配備了 Core i7-8700T 處理器、Quadro P620
顯卡(或是不裝顯卡的話,可以用這空間來放一顆額外的 2.5 吋 SSD)、 32GB M.2 SSD、及最高 32GB
的記憶體,並且會在稍後提供 Quadro P1000 與 64GB 記憶體的選項。Quadro 獨顯的採用,也讓它可以輸出到最多六個螢幕之多呢。
https://chinese.engadget.com/2018/09/26/thinkpad-p1-thinkstation-p330-tiny-tw/
Wednesday, 26 September 2018
Friday, 21 September 2018
luren.jia outlook
tapiro sina
xiaoyong.my gmail
silyong.p gmail
yongpoh ymail
silyong.p icloud
tapiro sina
xiaoyong.my gmail
silyong.p gmail
yongpoh ymail
silyong.p icloud
Monday, 10 September 2018
網路位址轉換
在電腦網路中,網路位址轉換(Network Address Translation,縮寫為NAT),也叫做網路掩蔽或者IP掩蔽(IP masquerading),是一種在IP封包通過路由器或防火牆時重寫來源IP位址或目的IP地址的技術。這種技術被普遍使用在有多台主機但只通過一個公有IP位址存取因特網的私有網路中。它是一個方便且得到了廣泛應用的技術。當然,NAT也讓主機之間的通訊變得複雜,導致了通訊效率的降低。
https://zh.wikipedia.org/wiki/%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2
How Network Address Translation Works
https://computer.howstuffworks.com/nat.htm/printable
UDP打洞
描述
通過UDP路由驗證實現NAT穿越是一種在處於使用了NAT的私有網絡中的Internet主機之間建立雙向UDP連接的方法。由於NAT的行為是非標準化的,因此它並不能應用於所有類型的NAT。其基本思想是這樣的:讓位於NAT後的兩台主機都與處於公共地址空間的、眾所周知的第三台伺服器相連,然後,一旦NAT設備建立好UDP狀態信息就轉為直接通信,並寄希望於NAT設備會在分組其實是從另外一個主機傳送過來的情況下仍然保持當前狀態。
這項技術需要一個圓錐型NAT設備才能夠正常工作。對稱型NAT不能使用這項技術。
這項技術在P2P軟體和VoIP電話領域被廣泛採用。它是Skype用以繞過防火牆和NAT設備的技術之一。
相同的技術有時還被用於TCP連接——儘管遠沒有UDP成功。
算法
假設有兩台分別處於各自的私有網絡中的主機:A和B;N1和N2是兩個網絡的NAT設備,分別擁有IP位址P1和P2;S是一個使用了一個眾所周知的、從全球任何地方都能訪問得到的IP位址的公共伺服器步驟一:A和B分別和S建立UDP連接;NAT設備N1和N2創建UDP轉換狀態並分配臨時的外部埠號
步驟二:S檢查UDP包,看A和B的埠是否是正在被使用的(否則的話N1和N2應該是應用了埠隨機分配,這會讓路由驗證變得更麻煩)
步驟三:如果埠不是隨機化的,那麼A和B各自選擇埠X和Y,並告知S。S會讓A發送UDP包到P2:Y,讓B發送UDP包到P1:X
步驟四:A和B通過轉換好的IP位址和埠直接聯繫到對方的NAT設備;
UDP broadcast
UDP broadcast is a technique that allows sending UDP datagram from a single source to all computers in a LAN. In order to send a UDP datagram addressed to all computers in the local area network it needs to be sent to a special address called the Broadcast address.
[worked] Udp Send / Receive
Sender
unit UnitUDPClientAndroid;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient,
FMX.Controls.Presentation, FMX.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
IdUDPClient1: TIdUDPClient;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
begin
with IdUDPClient1 do
begin
Host := '192.168.0.5';
Port := 69;
send('filename.txt');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
IdUDPClient1.Active := true;
end;
end.
// -----------------------------------------------------------------------------------------------------------
Receiver
unit UnitServer;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IdComponent,
IdIPWatch, IdBaseComponent, IdUDPBase, IdUDPServer, FMX.Controls.Presentation,
FMX.ScrollBox, FMX.Memo, IdGlobal, IdSocketHandle;
type
TForm1 = class(TForm)
IdUDPServer1: TIdUDPServer;
IdIPWatch1: TIdIPWatch;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
MyUDPMessage : String;
implementation
{$R *.fmx}
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Add(IdIPWatch1.LocalIP);
Form1.IdUDPServer1.DefaultPort := 69;
Form1.IdUDPServer1.Active := True;
Form1.IdUDPServer1.OnUDPRead := IdUDPServer1UDPRead;
end;
procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle);
begin
MyUDPmessage := BytesToString(AData);
Memo1.Lines.Add(MyUDPMessage);
end;
end.
unit UnitUDPClientAndroid;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient,
FMX.Controls.Presentation, FMX.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
IdUDPClient1: TIdUDPClient;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
begin
with IdUDPClient1 do
begin
Host := '192.168.0.5';
Port := 69;
send('filename.txt');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
IdUDPClient1.Active := true;
end;
end.
// -----------------------------------------------------------------------------------------------------------
Receiver
unit UnitServer;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IdComponent,
IdIPWatch, IdBaseComponent, IdUDPBase, IdUDPServer, FMX.Controls.Presentation,
FMX.ScrollBox, FMX.Memo, IdGlobal, IdSocketHandle;
type
TForm1 = class(TForm)
IdUDPServer1: TIdUDPServer;
IdIPWatch1: TIdIPWatch;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
MyUDPMessage : String;
implementation
{$R *.fmx}
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Add(IdIPWatch1.LocalIP);
Form1.IdUDPServer1.DefaultPort := 69;
Form1.IdUDPServer1.Active := True;
Form1.IdUDPServer1.OnUDPRead := IdUDPServer1UDPRead;
end;
procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle);
begin
MyUDPmessage := BytesToString(AData);
Memo1.Lines.Add(MyUDPMessage);
end;
end.
UDP
用户数据报协议(英语:User Datagram Protocol,縮寫為UDP),又稱使用者資料包協定,是一个简单的面向数据报的传输层协议,正式規範為RFC 768。
在TCP/IP模型中,UDP为网络层以上和应用层以下提供了一个简单的接口。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)。
UDP首部字段由4个部分组成,其中两个是可选的。各16bit的來源端口和目的端口用来标记发送和接受的应用进程。因为UDP不需要应答,所以來源端口是可选的,如果來源端口不用,那么置为零。在目的端口后面是长度固定的以字节为单位的长度域,用来指定UDP数据报包括数据部分的长度,长度最小值为8byte。首部剩下地16bit是用来对首部和数据部分一起做校驗和(Checksum)的,这部分是可选的,但在实际应用中一般都使用这一功能。
由于缺乏可靠性且屬於非連接導向協定,UDP应用一般必须允许一定量的丢包、出错和复制貼上。但有些应用,比如TFTP,如果需要则必须在应用层增加根本的可靠机制。但是绝大多数UDP应用都不需要可靠机制,甚至可能因为引入可靠机制而降低性能。流媒體(串流技術)、即时多媒体游戏和IP电话(VoIP)一定就是典型的UDP应用。如果某个应用需要很高的可靠性,那么可以用传输控制协议(TCP协议)来代替UDP。
由于缺乏拥塞控制(congestion control),需要基于网络的机制来减少因失控和高速UDP流量负荷而导致的拥塞崩溃效应。换句话说,因为UDP发送者不能够检测拥塞,所以像使用包队列和丢弃技术的路由器这样的网络基本设备往往就成为降低UDP过大通信量的有效工具。数据报拥塞控制协议(DCCP)设计成通过在诸如流媒体类型的高速率UDP流中,增加主机拥塞控制,来减小这个潜在的问题。
典型网络上的众多使用UDP协议的关键应用一定程度上是相似的。这些应用包括域名系统(DNS)、简单网络管理协议(SNMP)、动态主机配置协议(DHCP)、路由信息协议(RIP)和某些影音串流服務等等。
在TCP/IP模型中,UDP为网络层以上和应用层以下提供了一个简单的接口。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)。
UDP首部字段由4个部分组成,其中两个是可选的。各16bit的來源端口和目的端口用来标记发送和接受的应用进程。因为UDP不需要应答,所以來源端口是可选的,如果來源端口不用,那么置为零。在目的端口后面是长度固定的以字节为单位的长度域,用来指定UDP数据报包括数据部分的长度,长度最小值为8byte。首部剩下地16bit是用来对首部和数据部分一起做校驗和(Checksum)的,这部分是可选的,但在实际应用中一般都使用这一功能。
由于缺乏可靠性且屬於非連接導向協定,UDP应用一般必须允许一定量的丢包、出错和复制貼上。但有些应用,比如TFTP,如果需要则必须在应用层增加根本的可靠机制。但是绝大多数UDP应用都不需要可靠机制,甚至可能因为引入可靠机制而降低性能。流媒體(串流技術)、即时多媒体游戏和IP电话(VoIP)一定就是典型的UDP应用。如果某个应用需要很高的可靠性,那么可以用传输控制协议(TCP协议)来代替UDP。
由于缺乏拥塞控制(congestion control),需要基于网络的机制来减少因失控和高速UDP流量负荷而导致的拥塞崩溃效应。换句话说,因为UDP发送者不能够检测拥塞,所以像使用包队列和丢弃技术的路由器这样的网络基本设备往往就成为降低UDP过大通信量的有效工具。数据报拥塞控制协议(DCCP)设计成通过在诸如流媒体类型的高速率UDP流中,增加主机拥塞控制,来减小这个潜在的问题。
典型网络上的众多使用UDP协议的关键应用一定程度上是相似的。这些应用包括域名系统(DNS)、简单网络管理协议(SNMP)、动态主机配置协议(DHCP)、路由信息协议(RIP)和某些影音串流服務等等。
Subscribe to:
Posts (Atom)
zomok E-commerce system plan. Choose your online ordering system. No-risk 30 day free trial. Then USD 9/month. No credit card required.
zomok E-commerce system plan. Choose your online ordering system. No-risk 30 day free trial. Then USD 9/month. No credit card required. h...
-
Grows your business with zomok online ordering platform. Zero commission. Suitable for restaurants, kopitiam, food, groceries, pet supplie...
-
Complete TFTP Server example, using Indy components There are not many good TFTP server examples out there, so I wrote this example of...