본문 바로가기

Golang/etc

tcp/ip -02,03

728x90
반응형

챕터를 두개 같이 포스팅하겠다. 

이유는 귀찮기 때문에 ㅎ

 

chapter2. 소켓의 타입과 프로토콜 설정

protocol 이란? -> 대화에 필요한 통신규약, 즉 네트워크 통신에 필요한 규약.

 

소켓 통신에서는 주로 ipv4 프로토콜 체계가 사용되고 있다. 

 

소켓의 타입에 따라 데이터 전송 방식이 달라진다. 

 

1. 연결지향형 소켓 (SOCK_STREAM) / TCP

- 중간에 데이터가 소멸되지 않고 목적지로 전송된다. 

- 전송순서대로 데이터가 수신된다. 

- 전송되는 데이터의 경계(Boundary)가 존재하지 않는다. / 데이터를 송수신하는 소켓은 내부적으로 buffer, 즉 바이트 배열을 지니고 있다. 떄문에 데이터가 수신되었다고 해서 바로 read 함수를 호출해야 하는 것은 아니다. 

- 데이터의 확인 절차가 필요하기 때문에 전송속도가 느리다. 

=> 신뢰성 있는 순차적 바이트기반의 연결지향 데이터 전송방식

 

 

 

2. 비연결지향형 소켓 (SOCK_DGRAM) /UDP

- 전송된 순서에 상관없이 가장 빠른 전송을 지향한다. 

- 전송된 데이터는 손실, 파손의 우려가 있다.

- 전송되는 데이터의 경계 (Boundary)가 존재한다. 

- 한 번에 전송할 수 있는 데이터의 크기가 제한된다. 

=> 신뢰성과 순차적 데이터 전송을 보장하지 않는 고속의 데이터 전송을 목적으로 하는 소켓

 

 

chapter3. 소켓에 할당되는 IP주소와 Port 번호

인터넷 주소란? -> 인터넷 상에서 컴퓨터를 구분하는 목적으로 사용되는 주소. 

- 4byte 주소 체계인 IPv4와 16byte 주소체계인 IPv6가 존재한다. 

 

IP : 네트워크 주소 + 호스트 주소

- 네트워크를 찾는다 = 라우터 장비를 찾는다. 

네트워크 주소가 203.211.27 라고 하면 이것은 라우터의 주소를 의미한다. 

네트워크ID는 같은 라우터를 사용하는 컴퓨터들이 공유하고 있고, 그 중 어떤 호스트(=컴퓨터)에 접근할 지는 호스트 주소를 통해 결정한다. 

 

IP주소중 먼저 네트워크ID를 참조해서 라우터로 접근

-> 라우터에서 호스트 ID를 참조하여 맞는 호스트에게 데이터를 전달한다. 

 

PORT 번호

-IP는 컴퓨터를 구분하는 용도로 사용되며, PORT는 소켓을 구분하는 용도로 사용된다. 

-하나의 프로그램 내에서는 둘 이상의 소켓이 존재할 수 있으므로, 둘 이상의 port가 하나의 프로그램에 의해 할당 될 수 있다. 

- port 번호는 16비트로 표현된다 (0이상 65535 이하)

- 0~1023은 잘 알려진 PORT라 해서 이미 용도가 결정되어 있다. 

 

*IPv4기반의 주소표현을 위한 구조체

struct sockaddr_in 

- sin_family : 주소체계 정보 저장 

- sin_port : 16비트 port번호 저장, 네트워크 바이트 순서로 저장

- sin_addr : 32비트 ip주소정보 저장, 네트워크 바이트 순서로 저장

- sin_zero : 특별한 의미를 지니지 않지만, ipv4의 데이터 구조로 맞춰주기 위해 0으로 초기화 되는 변수를 지정하는것.

 

*네트워크 바이트 순서와 인터넷 주소 변환

같은 데이터 타입이어도 cpu에 따라 데이터를 저장하는 방식이 달라질 수 있다. 

 

* Big Endian vs Little Endian 

- 빅 엔디안 : 상위 바이트 값을 작은 번지수에 저장한다.

- 리틀 엔디안 : 상위 바이트 값을 큰 번지수에 저장한다. 

 

데이터 저장 방식이 다른 두 컴퓨터가 네트워크 통신을 할 때 문제가 발생 할 수 있기 때문에

통신에 있어서는 Big Endian 방식으로 통일한다. 

 

하지만 소켓 통신을 할 때는 자동으로 변환이 되지만, 소켓을 생성하는데 필요한 데이터 (ex. port번호)는 변환이 필요하다. 

 

 

 

 

 

 

 

728x90
반응형

'Golang > etc' 카테고리의 다른 글

tcp/ip 05  (0) 2022.07.03
tcp/ip 04  (0) 2022.06.28
tcp/ip - 01  (0) 2022.06.22
Golang Apple Login (애플 로그인)  (0) 2022.06.14
Apple 로그인 JWT, JWK  (1) 2022.06.14