티스토리 뷰

dev_공부일지/HTTP

IP와 TCP ,UDP

dev_0hoon 2021. 8. 28. 16:05

IP(인터넷 프로토콜)


친구가 내컴퓨터로 인터넷 망에서 HELLOWORLD를 보내려면

인터넷에 최소한의 규칙이있는데 이것은 IP로 가능해진다

IP주소가 있다면 지정한 IP에 데이터를 전달한다면

패킷(Packet)이라는 단위로 보내게 된다.

ip 패킷이라는 규칙이 있는데

이곳에는

출발지 ip
목적지 ip 
메세지 등등으로 패킷을 만든다음에
이것을 인터넷에 던지게 된다


그럼 이걸 받은 내 컴퓨터는 똑같이

출발지 ip
목적지 ip
메세지 등등으로 패킷을 만들고 던지게된다

근데 이 ip프로토콜 (즉 ip주소를 부여하고 찾아가는 방식, 패킷에 담는 방식)은
한계가 있다

먼저 
비연결성 - 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
(친구의 컴퓨터가 꺼져있는데 던지는 경우, 친구한테 보냈는데 친구가 없는경우)

비신뢰성 - 중간에 뭘 던졌는데 패킷이 이상한데로 가거나 , 여러개를 보냈는데
순서대로 보내지지 않았을때

프로그램 구분 - 내가 하나의 컴퓨터(ip)로 노래도 듣고 영상도보고 게임도 하고있는데 이건 어떻게 구분이 될 것인지

1번이 hello
2번이 world

이렇게 보냈는데 패킷이 인터넷 안에 중간에서 다른 노드를 탈수도있다

그러다 보면 마지막에
2번이 먼저 도착하고
1번이 도착해서 world hello가 도착 할 수 있다

이래서 ip프로토콜만으로 해결할 수 없다

그래서 필요한 것이 TCP이다


TCP와 UDP

인터넷 프로토콜 스택의 4계층
애플리케이션 계층 - HTTP,FTP
전송 계층 - TCP,UDP
인터넷 계층 - IP
네트워크 인터페이스 계층

사실 이렇게만 보면 이해가 잘 되지 않는데

애플리케이션은 웹브라우저, 네트워크 게임, 채팅프로그램  그리고 SOCKET라이브러리

OS에 IP가 있고 그위에 TCP와 UDP가 살짝 얹어져있다

네트워크 인터페이스는 LAN드라이버와 LAN 장비들이있다


우리의 순서로 생각하는 것은 애플리케이션 -> OS -> 네트워크 인터페이스 ->인터넷 서버
로 생각해면 된다

채팅프로그램에서 SOCKET라이브러리를 통해 HELLO 라는 메세지를  넘기면
OS에서 TCP가 TCP정보를 만들어 깻잎싸듯 데이터를 감싼다 또 IP를 상추싸듯 TCP정보를 감싼다

이제 LAN카드 LAN장비에서 뭐.. 호박잎으로 감싸고 서버로 보낸다

(이쯤에서 패킷은 패키지와 버킷의 합성어다 포장박스라고 생각하면 된다)

반대로 생각해보면

출발지IP와 목적지IP를 가지고 있는 IP안에
TCP가 들어있는데 이곳에는 출발지 PORT와 목적지 PORT,전송제어,순서, 검증정보
등이 들어가게 된다.

TCP의 특징

전송 제어 프로토콜 (Transmission Control Protocol)

- 연결지향 - TCP3 wayhandshake (먼저 쟤랑 나랑 연결이 됐다부터 확인을 한다)

[CONNET,연결 과정]
먼저
1. 클라이언트에서 서버(받는곳) 으로 SYN(접속요청)이라는 
2. 서버에서 SYN을 받게되면 서버도 SYN과 ACK(요청 수락)을 보낸다
그럼 
3.클라이언트는 그 수락을 받고 ACK를 보내게 되고
4.데이터를 전송하게 된다. (요즘엔 최적화 되어서 ACK보낼 때 같이보냄)

근데 이건 진짜 연결된게 아니다 개념적으로만 연결됐다.

TCP 3 wayhandshake 은 인터넷의 다른 노드들은 연결된지 알수 없다

그냥 서로만 연결됐다보다 하는 느낌이라고 생각하면된다


- 데이터 전달 보증 (데이터를 받았는지 누락 됐는지가 확인이 가능함)

1. 데이터를 전송하게 되면
2. 잘받았다고 답장을 보내준다.


- 순서 보장

만약 1 2 3 번으로 패킷을 보냈다가 1 3 2 으로 받게 되면 
'야 2번보다 3번이 먼저왔다 다시보내!' 라고 말하면 
2번부터 다시 보내게 된다.

-신뢰할 수 있는 프로토콜
그래서 신뢰할 수 있다고 한다.

-현재는 대부분 TCP 사용


UDP는 별 기능이 없고 하얀도화지라고 생각하면된다

그럼 왜 TCP와 같은 계층일까?
UDP의 기능으로는 PORT가 추가 되어있다.

음악도 듣고 영상도보고 게임도 하고있으면

여러패킷을 받게 되는데
이걸 구분하는것이 PORT이고 

근데 굳이 TCP가 아닌 UDP를 쓸까

왜냐면 TCP는 3핸드쉐이킹 같은 걸 사용하다보니 속도가 느릴 수 있다.
근데 이미 네트워크에서 TCP 구축 되어있기 때문에 더이상 최적화가 어렵다

그래서 아예 도화지 같은 UDP를 쓴다
UDP는 거의 백지이기에 거기에서 원하는 방식으로 사용한다




'dev_공부일지 > HTTP' 카테고리의 다른 글

HTTP 메소드  (0) 2022.03.30
HTTP  (0) 2022.03.16
DNS  (0) 2021.08.30
PORT  (0) 2021.08.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함