Network 4. 4계층 프로토콜(UDP,TCP), NAT

skh951225·2023년 3월 7일
0

네트워크 기초

목록 보기
4/5

출처 : Youtube

4계층 프로토콜

4계층 프로토콜은 전송계층(Trasnport layer)으로 송신자의 프로세스와 수신자의 프로세스를 연결하는 통신 서비스를 제공한다. UDP는 안전한 연결을 지향하지 않는 프로토콜이다. 반면 TCP는 연결한 다음 데이터를 보내고 보내고 난 후에도 안전하게 수신했는지 확인한다. 굉장히 안전한 연결을 지향하는 프로토콜이라고 할 수 있다.

4계층에서 사용하는 주소는 포트번호이다. 하나의 포트는 하나의 프로세스만 사용가능하다. 하나의 프로세스가 여러개의 포트를 사용하는 것은 가능하다. 포트번호는 일반적으로 정해져 있지만 무조건 지켜야하는 것은 아니다.(eg. 웹서비스는 80번 포트를 사용하지만 항상 80번 포트를 사용하는 것은 아니다.)

위의 Well-Known 포트는 굉장히 자주 사용하는 포트번호를 말한다. 0~1024가 이에 해당하며 유명한 서버가 사용하는 포트번호이다. Dynamic 포트는 일반적으로 사용자들이 사용하는 포트를 말하며 49152~65535번이 이에 해당한다.

registered 포트는 조금 유명한(공신력있는?) 프로그램이 등록한 포트번호이다.

netstat -ano 를 통해 활성 연결 테이블을 확인할 수 있다. 어떤 프로그램이 어떤 포트를 통해 외부의 어떤 포트와 연결중인지 확인할 수 있다. www.naver.com.:80 을하면 www.naver.com 과 같은 결과를 얻게 되는데 이는 www.naver.com 뒤에 .:80이 생략되었기 때문이다.

비연결지향형 UDP 프로토콜

UDP(User Datagram Protocol)은 전송 방식이 단순해서 서비스의 reliability가 낮고, 데이터 그램 도착 순서가 바뀌거나, 중복되거나, 심지어 통보 없이 누락시키도 한다. UDP프로토콜은 일반적으로 오류의 검사와 수정이 필요없는 프로그램에서 수행할 것으로 가정한다. Length는 UDP 프로토콜과 페이로드를 포함한 길이.

UDP 프로토콜을 사용하는 대표적인 프로그램은 도메인을 물으면 IP를 알려주는 DNS 서버가 있다. 그 외에도 파일을 전송하는 tftp 서버, 라우팅 정보를 공유하는 RIP 프로토콜이 있다.

연결지향형 TCP 프로토콜

TCP(Transmission Control Protocol)은 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 통신을 안정적, 순서대로, 에러없이 교환할 수 있게한다. TCP는 안전하지만 UDP보다 느리다.(속도측면은 알아보기 힘들정도로 차이가 크지 않다.)

Offset : 바이트 단위의 헤더길이를 4로 나눈 값
Reserved : 예약된 필드로 사용하지 않는 필드
Window : 내 사용공간(TCP buffer)이 얼마만큼 남아있는지 상대방에게 알려주는 부분
TCP Flags : Flag를 어떻게 설정하는지에 따라 TCP 프로토콜을 보내는 목적을 표시할 수 있다. TCP flags 는 하나만 1로 세팅되는 것이 아니라 여러개가 세팅될 수 있음
U(Urgent bit) :내가 보내는 데이터가 우선순위가 높다, 1로 설정한다고 딱히 먼저 처리되는 것은 없음, Urgent Pointer(어디서부터 긴급 데이터인지 알려주는)와 세트
A(Acknowledgement bit) : 물어본 것에 대한 응답을 해줄때, 승인을 해줄때
P(push bit) : TCP buffer가 일정 정도 쌓여야 패킷을 추가적으로 전송하는데, 상관없이 데이터를 밀어 넣겠다.
R(reset bit) : 상대방과 연결이 되어있는 상태에서 추가적으로 데이터를 주고받으려고하는데 문제가 생겨 서로의 관계를 초기화 하는 비트
S(Synchronize bit) : 상대방과 연결을 시작할때 무조건 사용하는 비트,동기화를 시작함을 알림, 이것이 보내지고 부터 서로 상태를 주고받으며 서로 동기화를 함
F(finish bit) : 연결을 끊을때 사용하는 플레그

TCP 통신과정

TCP를 이용한 데이터 통신을 할 때 프로세스와 프로세스를 연결하기 위해 가장 먼저 수행되는 과정으로 총 3단계로 구성되어 있다.
1. 클라이언트가 서버에게 요청 패킷을 보내고(항상 요청은 클라이언트가)
2. 서버가 클라이언트의 요청을 받아들이는 패킷을 보내고
3. 클라이언트는 이를 최종적으로 수락하는 패킷을 보낸다.
이 과정을 3Way handshake라고 부른다.

동기화 과정에서 sequence 번호와 ack 번호가 사용된다. 처음 클라이언트가 서버에게 sequence 번호와 ack 번호를 보낼때 보통 sequence 번호는 랜덤하게 설정을 하고 ack번호는 0으로 설정하여 보낸다. 그러면 서버가 그 값을 받아, 클라이언트가 보낸 sequence 번호에 1을 더하여 ack번호를 설정하고 sequence 번호는 랜덤하게 세팅하여 다시 클라이언트에게 보낸다. 클라이언트는 서버가 보낸 sequence 번호를 마찬가지로 1더하여 ack번호를 설정하고 서버가 보낸 ack 번호를 sequence 번호로 설정여 둘의 동기화가 성공적으로 이루어 졌음을 나타내는 패킷을 서버에게 보낸다.

TCP를 통해 연결이 수립되고 난 후 데이터(페이로드를 포함하여)를 송수신하게된다. 이때에도 일정한 규칙이 존재한다.
1. 보낸 쪽에서 또 보낼 때는 SEQ번호와 ACK번호가 그대로이다.
2. 받는 쪽에서 SEQ번호는 받은 ACK 번호가 된다.
3. 받는 쪽에서 ACK번호는 받은 SEQ번호 + 데이터의 크기이다.

클라이언트가 서버에게 보내는 데이터는 100, 서버가 클라이언트에게 응답하는 데이터는 500이다.

TCP의 여러가지 연결 상태 변화를 나타낸 상태전이도이다. 여기서 LISTEN은 서버가 포트를 열어놓은 상태이고 ESTABLISED 는 연결이 수립된 상태이다. 점선은 서버, 실선은 클라이언트의 흐름을 나타낸 것이다.

NAT(Network Address Translation)

멀리있는 컴퓨터와 통신을 할때, 네트워크 대역이 바뀌면 Ethernet 프로토콜을 재작성하곤 했다. NAT 는 3,4계층의 프로토콜을 재작성한다. IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록 하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술을 말한다. 패킷의 변화가 생기기 때문에 IP나 TCP/UDP의 체크섬도 다시 계산되어야 한다. NAT를 이용하는 이유는 대개 사설 네트워크에 속한 여러개의 호스트가 하나의 공인 IP주소를 사용하여 인터넷에 접속하기 위함이다. 하지만 사설 IP를 공인IP로 바꾸는 기술만을 뜻하는 것은 아니다.

포트 포워딩은 특정한 포트로 들어오는 데이터 패킷을 다른 포트로 바꿔서 다시 전송해주는 작업을 말한다. 빗대어 표현하자면 원래 포트는 모두 닫혀있는 상태이고 포트로 요청이 들어오게되면 해당 패킷에 대한 확인을 하는 절차를 거친다. 하지만 포트포워딩을 하게되면 포트를 열어두고 해당 포트로 들어오는 패킷은 자동으로 미리 설정된 경로를 따라 네트워크 대역 내의 특정 IP로 전달된다.

허브,스위치,라우터,공유기에 자세한 설명

0개의 댓글